/*
 * Copyright (c) 2018 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
const AbstractModel = require("../../common/abstract_model");

/**
 * DescribeApmAssociation response structure.
 * @class
 */
class DescribeApmAssociationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Associated product instance ID.
         * @type {ApmAssociation || null}
         */
        this.ApmAssociation = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ApmAssociation) {
            let obj = new ApmAssociation();
            obj.deserialize(params.ApmAssociation)
            this.ApmAssociation = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyApmInstance request structure.
 * @class
 */
class ModifyApmInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Business system id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Business system name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Tag list.
         * @type {Array.<ApmTag> || null}
         */
        this.Tags = null;

        /**
         * Business system description.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Retention period of trace data (unit: days).
         * @type {number || null}
         */
        this.TraceDuration = null;

        /**
         * Billing switch.
         * @type {boolean || null}
         */
        this.OpenBilling = null;

        /**
         * Business system report limit.
         * @type {number || null}
         */
        this.SpanDailyCounters = null;

        /**
         * Error rate warning line. when the average error rate of the application exceeds this threshold, the system will give an abnormal note.
         * @type {number || null}
         */
        this.ErrRateThreshold = null;

        /**
         * Sampling rate (unit: %).
         * @type {number || null}
         */
        this.SampleRate = null;

        /**
         * Error sampling switch (0: off, 1: on).
         * @type {number || null}
         */
        this.ErrorSample = null;

        /**
         * Sampling slow call saving threshold (unit: ms).
         * @type {number || null}
         */
        this.SlowRequestSavedThreshold = null;

        /**
         * Log feature switch (0: off; 1: on).
         * @type {number || null}
         */
        this.IsRelatedLog = null;

        /**
         * Log region, which takes effect after the log feature is enabled.
         * @type {string || null}
         */
        this.LogRegion = null;

        /**
         * CLS log topic id, which takes effect after the log feature is enabled.
         * @type {string || null}
         */
        this.LogTopicID = null;

        /**
         * Logset, which takes effect only after the log feature is enabled.
         * @type {string || null}
         */
        this.LogSet = null;

        /**
         * Log source, which takes effect only after the log feature is enabled.
         * @type {string || null}
         */
        this.LogSource = null;

        /**
         * List of custom display tags.
         * @type {Array.<string> || null}
         */
        this.CustomShowTags = null;

        /**
         * Modify billing mode (1: prepaid, 0: pay-as-you-go).
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * Response time warning line.
         * @type {number || null}
         */
        this.ResponseDurationWarningThreshold = null;

        /**
         * Whether it is free (0 = paid edition; 1 = tsf restricted free edition; 2 = free edition), default 0.
         * @type {number || null}
         */
        this.Free = null;

        /**
         * Whether to associate the dashboard (0 = off, 1 = on).
         * @type {number || null}
         */
        this.IsRelatedDashboard = null;

        /**
         * Associated dashboard id, which takes effect after the associated dashboard is enabled.
         * @type {string || null}
         */
        this.DashboardTopicID = null;

        /**
         * SQL injection detection switch (0: off, 1: on).
         * @type {number || null}
         */
        this.IsSqlInjectionAnalysis = null;

        /**
         * Whether to enable component vulnerability detection (0 = no, 1 = yes).
         * @type {number || null}
         */
        this.IsInstrumentationVulnerabilityScan = null;

        /**
         * Whether to enable detection of the remote command attack.
         * @type {number || null}
         */
        this.IsRemoteCommandExecutionAnalysis = null;

        /**
         * Whether to enable detection of Java webshell.
         * @type {number || null}
         */
        this.IsMemoryHijackingAnalysis = null;

        /**
         * CLS index type. (0 = full-text index; 1 = key-value index).
         * @type {number || null}
         */
        this.LogIndexType = null;

        /**
         * Index key of traceId. It is valid when the CLS index type is key-value index.
         * @type {string || null}
         */
        this.LogTraceIdKey = null;

        /**
         * Whether to enable the detection of deleting arbitrary files. (0 - disabled; 1: enabled.)
         * @type {number || null}
         */
        this.IsDeleteAnyFileAnalysis = null;

        /**
         * Whether to enable the detection of reading arbitrary files. (0 - disabled; 1 - enabled.)
         * @type {number || null}
         */
        this.IsReadAnyFileAnalysis = null;

        /**
         * Whether to enable the detection of uploading arbitrary files. (0 - disabled; 1 - enabled.)
         * @type {number || null}
         */
        this.IsUploadAnyFileAnalysis = null;

        /**
         * Whether to enable the detection of the inclusion of arbitrary files. (0: disabled, 1: enabled.)
         * @type {number || null}
         */
        this.IsIncludeAnyFileAnalysis = null;

        /**
         * Whether to enable traversal detection of the directory. (0 - disabled; 1 - enabled).
         * @type {number || null}
         */
        this.IsDirectoryTraversalAnalysis = null;

        /**
         * Whether to enable template engine injection detection. (0: disabled; 1: enabled.)
         * @type {number || null}
         */
        this.IsTemplateEngineInjectionAnalysis = null;

        /**
         * Whether to enable script engine injection detection. (0 - disabled; 1 - enabled.)
         * @type {number || null}
         */
        this.IsScriptEngineInjectionAnalysis = null;

        /**
         * Whether to enable expression injection detection. (0 - disabled; 1 - enabled.)
         * @type {number || null}
         */
        this.IsExpressionInjectionAnalysis = null;

        /**
         * Whether to enable JNDI injection detection. (0 - disabled; 1 - enabled.)
         * @type {number || null}
         */
        this.IsJNDIInjectionAnalysis = null;

        /**
         * Whether to enable JNI injection detection. (0 - disabled, 1 - enabled).
         * @type {number || null}
         */
        this.IsJNIInjectionAnalysis = null;

        /**
         * Whether to enable Webshell backdoor detection. (0 - disabled; 1 - enabled).
         * @type {number || null}
         */
        this.IsWebshellBackdoorAnalysis = null;

        /**
         * Whether to enable deserialization detection. (0 - disabled; 1 - enabled).
         * @type {number || null}
         */
        this.IsDeserializationAnalysis = null;

        /**
         * Convergence threshold for URL long segments.
         * @type {number || null}
         */
        this.UrlLongSegmentThreshold = null;

        /**
         * Convergence threshold for URL numerical segments.
         * @type {number || null}
         */
        this.UrlNumberSegmentThreshold = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Name = 'Name' in params ? params.Name : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new ApmTag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.Description = 'Description' in params ? params.Description : null;
        this.TraceDuration = 'TraceDuration' in params ? params.TraceDuration : null;
        this.OpenBilling = 'OpenBilling' in params ? params.OpenBilling : null;
        this.SpanDailyCounters = 'SpanDailyCounters' in params ? params.SpanDailyCounters : null;
        this.ErrRateThreshold = 'ErrRateThreshold' in params ? params.ErrRateThreshold : null;
        this.SampleRate = 'SampleRate' in params ? params.SampleRate : null;
        this.ErrorSample = 'ErrorSample' in params ? params.ErrorSample : null;
        this.SlowRequestSavedThreshold = 'SlowRequestSavedThreshold' in params ? params.SlowRequestSavedThreshold : null;
        this.IsRelatedLog = 'IsRelatedLog' in params ? params.IsRelatedLog : null;
        this.LogRegion = 'LogRegion' in params ? params.LogRegion : null;
        this.LogTopicID = 'LogTopicID' in params ? params.LogTopicID : null;
        this.LogSet = 'LogSet' in params ? params.LogSet : null;
        this.LogSource = 'LogSource' in params ? params.LogSource : null;
        this.CustomShowTags = 'CustomShowTags' in params ? params.CustomShowTags : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.ResponseDurationWarningThreshold = 'ResponseDurationWarningThreshold' in params ? params.ResponseDurationWarningThreshold : null;
        this.Free = 'Free' in params ? params.Free : null;
        this.IsRelatedDashboard = 'IsRelatedDashboard' in params ? params.IsRelatedDashboard : null;
        this.DashboardTopicID = 'DashboardTopicID' in params ? params.DashboardTopicID : null;
        this.IsSqlInjectionAnalysis = 'IsSqlInjectionAnalysis' in params ? params.IsSqlInjectionAnalysis : null;
        this.IsInstrumentationVulnerabilityScan = 'IsInstrumentationVulnerabilityScan' in params ? params.IsInstrumentationVulnerabilityScan : null;
        this.IsRemoteCommandExecutionAnalysis = 'IsRemoteCommandExecutionAnalysis' in params ? params.IsRemoteCommandExecutionAnalysis : null;
        this.IsMemoryHijackingAnalysis = 'IsMemoryHijackingAnalysis' in params ? params.IsMemoryHijackingAnalysis : null;
        this.LogIndexType = 'LogIndexType' in params ? params.LogIndexType : null;
        this.LogTraceIdKey = 'LogTraceIdKey' in params ? params.LogTraceIdKey : null;
        this.IsDeleteAnyFileAnalysis = 'IsDeleteAnyFileAnalysis' in params ? params.IsDeleteAnyFileAnalysis : null;
        this.IsReadAnyFileAnalysis = 'IsReadAnyFileAnalysis' in params ? params.IsReadAnyFileAnalysis : null;
        this.IsUploadAnyFileAnalysis = 'IsUploadAnyFileAnalysis' in params ? params.IsUploadAnyFileAnalysis : null;
        this.IsIncludeAnyFileAnalysis = 'IsIncludeAnyFileAnalysis' in params ? params.IsIncludeAnyFileAnalysis : null;
        this.IsDirectoryTraversalAnalysis = 'IsDirectoryTraversalAnalysis' in params ? params.IsDirectoryTraversalAnalysis : null;
        this.IsTemplateEngineInjectionAnalysis = 'IsTemplateEngineInjectionAnalysis' in params ? params.IsTemplateEngineInjectionAnalysis : null;
        this.IsScriptEngineInjectionAnalysis = 'IsScriptEngineInjectionAnalysis' in params ? params.IsScriptEngineInjectionAnalysis : null;
        this.IsExpressionInjectionAnalysis = 'IsExpressionInjectionAnalysis' in params ? params.IsExpressionInjectionAnalysis : null;
        this.IsJNDIInjectionAnalysis = 'IsJNDIInjectionAnalysis' in params ? params.IsJNDIInjectionAnalysis : null;
        this.IsJNIInjectionAnalysis = 'IsJNIInjectionAnalysis' in params ? params.IsJNIInjectionAnalysis : null;
        this.IsWebshellBackdoorAnalysis = 'IsWebshellBackdoorAnalysis' in params ? params.IsWebshellBackdoorAnalysis : null;
        this.IsDeserializationAnalysis = 'IsDeserializationAnalysis' in params ? params.IsDeserializationAnalysis : null;
        this.UrlLongSegmentThreshold = 'UrlLongSegmentThreshold' in params ? params.UrlLongSegmentThreshold : null;
        this.UrlNumberSegmentThreshold = 'UrlNumberSegmentThreshold' in params ? params.UrlNumberSegmentThreshold : null;

    }
}

/**
 * APM business system information.
 * @class
 */
class ApmInstanceDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * Business system id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Business system name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Business system description information.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Status of the business system.
{Initializing; running; throttling}.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Region where the business system belongs.
         * @type {string || null}
         */
        this.Region = null;

        /**
         * Business system tag list.
         * @type {Array.<ApmTag> || null}
         */
        this.Tags = null;

        /**
         * AppID information.
         * @type {number || null}
         */
        this.AppId = null;

        /**
         * Creator uin.
         * @type {string || null}
         */
        this.CreateUin = null;

        /**
         * Storage used (unit: mb).
         * @type {number || null}
         */
        this.AmountOfUsedStorage = null;

        /**
         * Quantity of server applications of the business system.
         * @type {number || null}
         */
        this.ServiceCount = null;

        /**
         * Average daily reported span count.
         * @type {number || null}
         */
        this.CountOfReportSpanPerDay = null;

        /**
         * Retention period of trace data (unit: days).
         * @type {number || null}
         */
        this.TraceDuration = null;

        /**
         * Business system report limit.
         * @type {number || null}
         */
        this.SpanDailyCounters = null;

        /**
         * Whether the business system billing is Activated (0 = not activated, 1 = activated).
         * @type {number || null}
         */
        this.BillingInstance = null;

        /**
         * Error warning line (unit: %).
         * @type {number || null}
         */
        this.ErrRateThreshold = null;

        /**
         * Sampling rate (unit: %).
         * @type {number || null}
         */
        this.SampleRate = null;

        /**
         * Error sampling switch (0: off, 1: on).
         * @type {number || null}
         */
        this.ErrorSample = null;

        /**
         * Sampling slow call saving threshold (unit: ms).
         * @type {number || null}
         */
        this.SlowRequestSavedThreshold = null;

        /**
         * CLS log region.
         * @type {string || null}
         */
        this.LogRegion = null;

        /**
         * Log source.
         * @type {string || null}
         */
        this.LogSource = null;

        /**
         * Log feature switch (0: off; 1: on).
         * @type {number || null}
         */
        this.IsRelatedLog = null;

        /**
         * Log topic id.
         * @type {string || null}
         */
        this.LogTopicID = null;

        /**
         * Quantity of client applications of the business system.
         * @type {number || null}
         */
        this.ClientCount = null;

        /**
         * The quantity of active applications in this business system in the last two days.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * CLS log set.
         * @type {string || null}
         */
        this.LogSet = null;

        /**
         * Retention period of metric data (unit: days).
         * @type {number || null}
         */
        this.MetricDuration = null;

        /**
         * List of custom display tags.
         * @type {Array.<string> || null}
         */
        this.CustomShowTags = null;

        /**
         * Business system billing mode (1: prepaid, 0: pay-as-you-go).
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * Indicates whether the billing mode of the business system takes effect.
         * @type {boolean || null}
         */
        this.PayModeEffective = null;

        /**
         * Response time warning line (unit: ms).
         * @type {number || null}
         */
        this.ResponseDurationWarningThreshold = null;

        /**
         * Whether it is free (0 = no; 1 = limited free; 2 = completely free), default 0.
         * @type {number || null}
         */
        this.Free = null;

        /**
         * Indicates whether it is the default business system of tsf (0 = no, 1 = yes).
         * @type {number || null}
         */
        this.DefaultTSF = null;

        /**
         * Whether to associate the dashboard (0 = off, 1 = on).
         * @type {number || null}
         */
        this.IsRelatedDashboard = null;

        /**
         * Associated dashboard id.
         * @type {string || null}
         */
        this.DashboardTopicID = null;

        /**
         * Whether to enable component vulnerability detection (0 = no, 1 = yes).
         * @type {number || null}
         */
        this.IsInstrumentationVulnerabilityScan = null;

        /**
         * Whether to enable sql injection analysis (0: off, 1: on).
         * @type {number || null}
         */
        this.IsSqlInjectionAnalysis = null;

        /**
         * Reasons for traffic throttling.
Official version quota;.
Trial version quota.
Trial version expiration;.
Account in arrears.
}.
         * @type {number || null}
         */
        this.StopReason = null;

        /**
         * Whether to enable detection of remote command execution (0 = disabled; 1 = enabled).
         * @type {number || null}
         */
        this.IsRemoteCommandExecutionAnalysis = null;

        /**
         * Whether to enable detection of Java webshell execution (0 = disabled; 1 = enabled).
         * @type {number || null}
         */
        this.IsMemoryHijackingAnalysis = null;

        /**
         * CLS index type. (0 = full-text index; 1 = key-value index).
         * @type {number || null}
         */
        this.LogIndexType = null;

        /**
         * Index key of traceId. It is valid when the CLS index type is key-value index.
         * @type {string || null}
         */
        this.LogTraceIdKey = null;

        /**
         * Whether to enable the detection of deleting arbitrary files. (0 - disabled; 1: enabled.)
         * @type {number || null}
         */
        this.IsDeleteAnyFileAnalysis = null;

        /**
         * Whether to enable the detection of reading arbitrary files. (0 - disabled; 1 - enabled.)
         * @type {number || null}
         */
        this.IsReadAnyFileAnalysis = null;

        /**
         * Whether to enable the detection of uploading arbitrary files. (0 - disabled; 1 - enabled.)
         * @type {number || null}
         */
        this.IsUploadAnyFileAnalysis = null;

        /**
         * Whether to enable the detection of the inclusion of arbitrary files. (0: disabled, 1: enabled.)
         * @type {number || null}
         */
        this.IsIncludeAnyFileAnalysis = null;

        /**
         * Whether to enable traversal detection of the directory. (0 - disabled; 1 - enabled).
         * @type {number || null}
         */
        this.IsDirectoryTraversalAnalysis = null;

        /**
         * Whether to enable template engine injection detection. (0: disabled; 1: enabled.)
         * @type {number || null}
         */
        this.IsTemplateEngineInjectionAnalysis = null;

        /**
         * Whether to enable script engine injection detection. (0 - disabled; 1 - enabled.)
         * @type {number || null}
         */
        this.IsScriptEngineInjectionAnalysis = null;

        /**
         * Whether to enable expression injection detection. (0 - disabled; 1 - enabled.)
         * @type {number || null}
         */
        this.IsExpressionInjectionAnalysis = null;

        /**
         * Whether to enable JNDI injection detection. (0 - disabled; 1 - enabled.)
         * @type {number || null}
         */
        this.IsJNDIInjectionAnalysis = null;

        /**
         * Whether to enable JNI injection detection. (0 - disabled, 1 - enabled).
         * @type {number || null}
         */
        this.IsJNIInjectionAnalysis = null;

        /**
         * Whether to enable Webshell backdoor detection. (0 - disabled; 1 - enabled).
         * @type {number || null}
         */
        this.IsWebshellBackdoorAnalysis = null;

        /**
         * Whether to enable deserialization detection. (0 - disabled; 1 - enabled).
         * @type {number || null}
         */
        this.IsDeserializationAnalysis = null;

        /**
         * Business system authentication token.
         * @type {string || null}
         */
        this.Token = null;

        /**
         * Convergence threshold for URL long segments.
         * @type {number || null}
         */
        this.UrlLongSegmentThreshold = null;

        /**
         * Convergence threshold for URL numerical segments.
         * @type {number || null}
         */
        this.UrlNumberSegmentThreshold = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Region = 'Region' in params ? params.Region : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new ApmTag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.AppId = 'AppId' in params ? params.AppId : null;
        this.CreateUin = 'CreateUin' in params ? params.CreateUin : null;
        this.AmountOfUsedStorage = 'AmountOfUsedStorage' in params ? params.AmountOfUsedStorage : null;
        this.ServiceCount = 'ServiceCount' in params ? params.ServiceCount : null;
        this.CountOfReportSpanPerDay = 'CountOfReportSpanPerDay' in params ? params.CountOfReportSpanPerDay : null;
        this.TraceDuration = 'TraceDuration' in params ? params.TraceDuration : null;
        this.SpanDailyCounters = 'SpanDailyCounters' in params ? params.SpanDailyCounters : null;
        this.BillingInstance = 'BillingInstance' in params ? params.BillingInstance : null;
        this.ErrRateThreshold = 'ErrRateThreshold' in params ? params.ErrRateThreshold : null;
        this.SampleRate = 'SampleRate' in params ? params.SampleRate : null;
        this.ErrorSample = 'ErrorSample' in params ? params.ErrorSample : null;
        this.SlowRequestSavedThreshold = 'SlowRequestSavedThreshold' in params ? params.SlowRequestSavedThreshold : null;
        this.LogRegion = 'LogRegion' in params ? params.LogRegion : null;
        this.LogSource = 'LogSource' in params ? params.LogSource : null;
        this.IsRelatedLog = 'IsRelatedLog' in params ? params.IsRelatedLog : null;
        this.LogTopicID = 'LogTopicID' in params ? params.LogTopicID : null;
        this.ClientCount = 'ClientCount' in params ? params.ClientCount : null;
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.LogSet = 'LogSet' in params ? params.LogSet : null;
        this.MetricDuration = 'MetricDuration' in params ? params.MetricDuration : null;
        this.CustomShowTags = 'CustomShowTags' in params ? params.CustomShowTags : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.PayModeEffective = 'PayModeEffective' in params ? params.PayModeEffective : null;
        this.ResponseDurationWarningThreshold = 'ResponseDurationWarningThreshold' in params ? params.ResponseDurationWarningThreshold : null;
        this.Free = 'Free' in params ? params.Free : null;
        this.DefaultTSF = 'DefaultTSF' in params ? params.DefaultTSF : null;
        this.IsRelatedDashboard = 'IsRelatedDashboard' in params ? params.IsRelatedDashboard : null;
        this.DashboardTopicID = 'DashboardTopicID' in params ? params.DashboardTopicID : null;
        this.IsInstrumentationVulnerabilityScan = 'IsInstrumentationVulnerabilityScan' in params ? params.IsInstrumentationVulnerabilityScan : null;
        this.IsSqlInjectionAnalysis = 'IsSqlInjectionAnalysis' in params ? params.IsSqlInjectionAnalysis : null;
        this.StopReason = 'StopReason' in params ? params.StopReason : null;
        this.IsRemoteCommandExecutionAnalysis = 'IsRemoteCommandExecutionAnalysis' in params ? params.IsRemoteCommandExecutionAnalysis : null;
        this.IsMemoryHijackingAnalysis = 'IsMemoryHijackingAnalysis' in params ? params.IsMemoryHijackingAnalysis : null;
        this.LogIndexType = 'LogIndexType' in params ? params.LogIndexType : null;
        this.LogTraceIdKey = 'LogTraceIdKey' in params ? params.LogTraceIdKey : null;
        this.IsDeleteAnyFileAnalysis = 'IsDeleteAnyFileAnalysis' in params ? params.IsDeleteAnyFileAnalysis : null;
        this.IsReadAnyFileAnalysis = 'IsReadAnyFileAnalysis' in params ? params.IsReadAnyFileAnalysis : null;
        this.IsUploadAnyFileAnalysis = 'IsUploadAnyFileAnalysis' in params ? params.IsUploadAnyFileAnalysis : null;
        this.IsIncludeAnyFileAnalysis = 'IsIncludeAnyFileAnalysis' in params ? params.IsIncludeAnyFileAnalysis : null;
        this.IsDirectoryTraversalAnalysis = 'IsDirectoryTraversalAnalysis' in params ? params.IsDirectoryTraversalAnalysis : null;
        this.IsTemplateEngineInjectionAnalysis = 'IsTemplateEngineInjectionAnalysis' in params ? params.IsTemplateEngineInjectionAnalysis : null;
        this.IsScriptEngineInjectionAnalysis = 'IsScriptEngineInjectionAnalysis' in params ? params.IsScriptEngineInjectionAnalysis : null;
        this.IsExpressionInjectionAnalysis = 'IsExpressionInjectionAnalysis' in params ? params.IsExpressionInjectionAnalysis : null;
        this.IsJNDIInjectionAnalysis = 'IsJNDIInjectionAnalysis' in params ? params.IsJNDIInjectionAnalysis : null;
        this.IsJNIInjectionAnalysis = 'IsJNIInjectionAnalysis' in params ? params.IsJNIInjectionAnalysis : null;
        this.IsWebshellBackdoorAnalysis = 'IsWebshellBackdoorAnalysis' in params ? params.IsWebshellBackdoorAnalysis : null;
        this.IsDeserializationAnalysis = 'IsDeserializationAnalysis' in params ? params.IsDeserializationAnalysis : null;
        this.Token = 'Token' in params ? params.Token : null;
        this.UrlLongSegmentThreshold = 'UrlLongSegmentThreshold' in params ? params.UrlLongSegmentThreshold : null;
        this.UrlNumberSegmentThreshold = 'UrlNumberSegmentThreshold' in params ? params.UrlNumberSegmentThreshold : null;

    }
}

/**
 * CreateApmInstance request structure.
 * @class
 */
class CreateApmInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Business system name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Business system description information.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Retention period of trace data (unit: days, the default storage duration is 3 days).
         * @type {number || null}
         */
        this.TraceDuration = null;

        /**
         * Business system tag list.
         * @type {Array.<ApmTag> || null}
         */
        this.Tags = null;

        /**
         * The report quota value of the business system. the default value is 0, indicating no limit on the report quota. (obsolete).
         * @type {number || null}
         */
        this.SpanDailyCounters = null;

        /**
         * Billing model of the business system (0: pay-as-you-go, 1: prepaid).
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * Whether it is a free edition business system (0 = paid edition; 1 = tsf restricted free edition; 2 = free edition).
         * @type {number || null}
         */
        this.Free = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.TraceDuration = 'TraceDuration' in params ? params.TraceDuration : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new ApmTag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.SpanDailyCounters = 'SpanDailyCounters' in params ? params.SpanDailyCounters : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.Free = 'Free' in params ? params.Free : null;

    }
}

/**
 * ModifyGeneralApmApplicationConfig request structure.
 * @class
 */
class ModifyGeneralApmApplicationConfigRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Business system id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Fields to be modified. the key and value respectively specify the field name and field value.
.
For specific fields, please refer to.
         * @type {Array.<ApmTag> || null}
         */
        this.Tags = null;

        /**
         * Name of the application list that requires configuration modification.	
         * @type {Array.<string> || null}
         */
        this.ServiceNames = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new ApmTag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.ServiceNames = 'ServiceNames' in params ? params.ServiceNames : null;

    }
}

/**
 * DescribeApmServiceMetric request structure.
 * @class
 */
class DescribeApmServiceMetricRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Business system ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Application name
         * @type {string || null}
         */
        this.ServiceName = null;

        /**
         * Application ID
         * @type {string || null}
         */
        this.ServiceID = null;

        /**
         * Start time.
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * End time.
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Order.
         * @type {OrderBy || null}
         */
        this.OrderBy = null;

        /**
         * Whether to use the demo mode.
         * @type {boolean || null}
         */
        this.Demo = null;

        /**
         * Application status filter criteria. valid values: health, warning, error. if multiple statuses are selected, separate them by commas, for example: "warning,error".
         * @type {string || null}
         */
        this.ServiceStatus = null;

        /**
         * Tag list
         * @type {Array.<ApmTag> || null}
         */
        this.Tags = null;

        /**
         * Page number.
         * @type {number || null}
         */
        this.Page = null;

        /**
         * Page size.
         * @type {number || null}
         */
        this.PageSize = null;

        /**
         * Filter criteria.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ServiceName = 'ServiceName' in params ? params.ServiceName : null;
        this.ServiceID = 'ServiceID' in params ? params.ServiceID : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;

        if (params.OrderBy) {
            let obj = new OrderBy();
            obj.deserialize(params.OrderBy)
            this.OrderBy = obj;
        }
        this.Demo = 'Demo' in params ? params.Demo : null;
        this.ServiceStatus = 'ServiceStatus' in params ? params.ServiceStatus : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new ApmTag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.Page = 'Page' in params ? params.Page : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * CreateApmPrometheusRule request structure.
 * @class
 */
class CreateApmPrometheusRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Metric match rule name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Applications where the rule takes effect. input an empty string for all applications.
         * @type {string || null}
         */
        this.ServiceName = null;

        /**
         * Match type: 0 - precision match, 1 - prefix match, 2 - suffix match.
         * @type {number || null}
         */
        this.MetricMatchType = null;

        /**
         * Specifies the rule for customer-defined metric names with cache hit.
         * @type {string || null}
         */
        this.MetricNameRule = null;

        /**
         * Business system ID
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.ServiceName = 'ServiceName' in params ? params.ServiceName : null;
        this.MetricMatchType = 'MetricMatchType' in params ? params.MetricMatchType : null;
        this.MetricNameRule = 'MetricNameRule' in params ? params.MetricNameRule : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * Querying.
 * @class
 */
class QueryMetricItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Metric name.
         * @type {string || null}
         */
        this.MetricName = null;

        /**
         * Year-Over-Year comparison is now supported for comparebyyesterday (compared to yesterday) and comparebylastweek (compared to last week). 
         * @type {Array.<string> || null}
         */
        this.Compares = null;

        /**
         * Year-On-Year, deprecated, not recommended for use.
         * @type {string || null}
         */
        this.Compare = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MetricName = 'MetricName' in params ? params.MetricName : null;
        this.Compares = 'Compares' in params ? params.Compares : null;
        this.Compare = 'Compare' in params ? params.Compare : null;

    }
}

/**
 * ModifyApmPrometheusRule request structure.
 * @class
 */
class ModifyApmPrometheusRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Rule ID
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Business system ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the rule name to modify.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Rule status: 1 (enabled), 2 (disabled), 3 (deleted).
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Applications where the rule takes effect. input an empty string for all applications. if this is not modified, pass the old rule.
         * @type {string || null}
         */
        this.ServiceName = null;

        /**
         * Match type: 0 - precision match, 1 - prefix match, 2 - suffix match (if not modified, the old rule must be passed).
         * @type {number || null}
         */
        this.MetricMatchType = null;

        /**
         * Specifies the rule for customer-defined metric names with cache hit.
         * @type {string || null}
         */
        this.MetricNameRule = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.ServiceName = 'ServiceName' in params ? params.ServiceName : null;
        this.MetricMatchType = 'MetricMatchType' in params ? params.MetricMatchType : null;
        this.MetricNameRule = 'MetricNameRule' in params ? params.MetricNameRule : null;

    }
}

/**
 * ModifyGeneralApmApplicationConfig response structure.
 * @class
 */
class ModifyGeneralApmApplicationConfigResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Description of the returned value.
         * @type {string || null}
         */
        this.Message = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Message = 'Message' in params ? params.Message : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeApmInstances response structure.
 * @class
 */
class DescribeApmInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * APM business system list.
         * @type {Array.<ApmInstanceDetail> || null}
         */
        this.Instances = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Instances) {
            this.Instances = new Array();
            for (let z in params.Instances) {
                let obj = new ApmInstanceDetail();
                obj.deserialize(params.Instances[z]);
                this.Instances.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Related configurations of the probe APIs.
 * @class
 */
class AgentOperationConfigView extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether allowlist configuration is enabled for the current API.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.RetentionValid = null;

        /**
         * Effective when RetentionValid is false. It indicates blocklist configuration in API settings. The APIs specified in the configuration do not support collection.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IgnoreOperation = null;

        /**
         * Effective when RetentionValid is true. It indicates allowlist configuration in API settings. Only the APIs specified in the configuration support collection.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RetentionOperation = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RetentionValid = 'RetentionValid' in params ? params.RetentionValid : null;
        this.IgnoreOperation = 'IgnoreOperation' in params ? params.IgnoreOperation : null;
        this.RetentionOperation = 'RetentionOperation' in params ? params.RetentionOperation : null;

    }
}

/**
 * Component.
 * @class
 */
class Instrument extends  AbstractModel {
    constructor(){
        super();

        /**
         * Component name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Component switch.
         * @type {boolean || null}
         */
        this.Enable = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Enable = 'Enable' in params ? params.Enable : null;

    }
}

/**
 * DescribeTagValues response structure.
 * @class
 */
class DescribeTagValuesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Dimension value list.
         * @type {Array.<string> || null}
         */
        this.Values = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Values = 'Values' in params ? params.Values : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeTagValues request structure.
 * @class
 */
class DescribeTagValuesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Dimension name.
         * @type {string || null}
         */
        this.TagKey = null;

        /**
         * Business system id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Start time (unit: sec).
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * End time (unit: seconds).
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Filter criteria.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Or filter criteria.
         * @type {Array.<Filter> || null}
         */
        this.OrFilters = null;

        /**
         * Usage type.
         * @type {string || null}
         */
        this.Type = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TagKey = 'TagKey' in params ? params.TagKey : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

        if (params.OrFilters) {
            this.OrFilters = new Array();
            for (let z in params.OrFilters) {
                let obj = new Filter();
                obj.deserialize(params.OrFilters[z]);
                this.OrFilters.push(obj);
            }
        }
        this.Type = 'Type' in params ? params.Type : null;

    }
}

/**
 * DescribeApmPrometheusRule response structure.
 * @class
 */
class DescribeApmPrometheusRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the metric match rule.
         * @type {Array.<ApmPrometheusRules> || null}
         */
        this.ApmPrometheusRules = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ApmPrometheusRules) {
            this.ApmPrometheusRules = new Array();
            for (let z in params.ApmPrometheusRules) {
                let obj = new ApmPrometheusRules();
                obj.deserialize(params.ApmPrometheusRules[z]);
                this.ApmPrometheusRules.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Detailed information about applications.
 * @class
 */
class ServiceDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ServiceID = null;

        /**
         * Business system ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceKey = null;

        /**
         * User appid.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.AppID = null;

        /**
         * Host account UIN
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreateUIN = null;

        /**
         * Application name
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ServiceName = null;

        /**
         * Application description
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ServiceDescription = null;

        /**
         * Region.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Region = null;

        /**
         * Tag.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ApmTag> || null}
         */
        this.Tags = null;

        /**
         * Business system name.
         * @type {string || null}
         */
        this.InstanceName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ServiceID = 'ServiceID' in params ? params.ServiceID : null;
        this.InstanceKey = 'InstanceKey' in params ? params.InstanceKey : null;
        this.AppID = 'AppID' in params ? params.AppID : null;
        this.CreateUIN = 'CreateUIN' in params ? params.CreateUIN : null;
        this.ServiceName = 'ServiceName' in params ? params.ServiceName : null;
        this.ServiceDescription = 'ServiceDescription' in params ? params.ServiceDescription : null;
        this.Region = 'Region' in params ? params.Region : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new ApmTag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;

    }
}

/**
 * Span object.
 * @class
 */
class Span extends  AbstractModel {
    constructor(){
        super();

        /**
         * Trace ID
         * @type {string || null}
         */
        this.TraceID = null;

        /**
         * Log.
         * @type {Array.<SpanLog> || null}
         */
        this.Logs = null;

        /**
         * Tag.
         * @type {Array.<SpanTag> || null}
         */
        this.Tags = null;

        /**
         * Submit application service information.
         * @type {SpanProcess || null}
         */
        this.Process = null;

        /**
         * Generated timestamp (ms).
         * @type {number || null}
         */
        this.Timestamp = null;

        /**
         * Span name.
         * @type {string || null}
         */
        this.OperationName = null;

        /**
         * Association relationship.
         * @type {Array.<SpanReference> || null}
         */
        this.References = null;

        /**
         * Generated timestamp (ms).
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * Duration (ms).
         * @type {number || null}
         */
        this.Duration = null;

        /**
         * Span ID
         * @type {string || null}
         */
        this.SpanID = null;

        /**
         * Generated timestamp (ms).
         * @type {number || null}
         */
        this.StartTimeMillis = null;

        /**
         * Parent Span ID
         * @type {string || null}
         */
        this.ParentSpanID = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TraceID = 'TraceID' in params ? params.TraceID : null;

        if (params.Logs) {
            this.Logs = new Array();
            for (let z in params.Logs) {
                let obj = new SpanLog();
                obj.deserialize(params.Logs[z]);
                this.Logs.push(obj);
            }
        }

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new SpanTag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }

        if (params.Process) {
            let obj = new SpanProcess();
            obj.deserialize(params.Process)
            this.Process = obj;
        }
        this.Timestamp = 'Timestamp' in params ? params.Timestamp : null;
        this.OperationName = 'OperationName' in params ? params.OperationName : null;

        if (params.References) {
            this.References = new Array();
            for (let z in params.References) {
                let obj = new SpanReference();
                obj.deserialize(params.References[z]);
                this.References.push(obj);
            }
        }
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.Duration = 'Duration' in params ? params.Duration : null;
        this.SpanID = 'SpanID' in params ? params.SpanID : null;
        this.StartTimeMillis = 'StartTimeMillis' in params ? params.StartTimeMillis : null;
        this.ParentSpanID = 'ParentSpanID' in params ? params.ParentSpanID : null;

    }
}

/**
 * APM agent information.
 * @class
 */
class ApmAgentInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Agent download address.
         * @type {string || null}
         */
        this.AgentDownloadURL = null;

        /**
         * Collector reporting address.
         * @type {string || null}
         */
        this.CollectorURL = null;

        /**
         * Token information.
         * @type {string || null}
         */
        this.Token = null;

        /**
         * Public network reporting address.
         * @type {string || null}
         */
        this.PublicCollectorURL = null;

        /**
         * Self-Developed vpc report address.
         * @type {string || null}
         */
        this.InnerCollectorURL = null;

        /**
         * Private link reporting address.
         * @type {string || null}
         */
        this.PrivateLinkCollectorURL = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AgentDownloadURL = 'AgentDownloadURL' in params ? params.AgentDownloadURL : null;
        this.CollectorURL = 'CollectorURL' in params ? params.CollectorURL : null;
        this.Token = 'Token' in params ? params.Token : null;
        this.PublicCollectorURL = 'PublicCollectorURL' in params ? params.PublicCollectorURL : null;
        this.InnerCollectorURL = 'InnerCollectorURL' in params ? params.InnerCollectorURL : null;
        this.PrivateLinkCollectorURL = 'PrivateLinkCollectorURL' in params ? params.PrivateLinkCollectorURL : null;

    }
}

/**
 * TerminateApmInstance request structure.
 * @class
 */
class TerminateApmInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Business system id.
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * Application-Related configuration list items.
 * @class
 */
class ApmApplicationConfigView extends  AbstractModel {
    constructor(){
        super();

        /**
         * Business system id.
         * @type {string || null}
         */
        this.InstanceKey = null;

        /**
         * Application name	.	
         * @type {string || null}
         */
        this.ServiceName = null;

        /**
         * API filtering.
         * @type {string || null}
         */
        this.OperationNameFilter = null;

        /**
         * Error type filtering.
         * @type {string || null}
         */
        this.ExceptionFilter = null;

        /**
         * HTTP status code filtering.
         * @type {string || null}
         */
        this.ErrorCodeFilter = null;

        /**
         * Application diagnosis switch (deprecated).
         * @type {boolean || null}
         */
        this.EventEnable = null;

        /**
         * URL convergence switch. 0: off; 1: on.
         * @type {number || null}
         */
        this.UrlConvergenceSwitch = null;

        /**
         * URL convergence threshold.	
         * @type {number || null}
         */
        this.UrlConvergenceThreshold = null;

        /**
         * URL convergence rule in the form of a regular expression.	
         * @type {string || null}
         */
        this.UrlConvergence = null;

        /**
         * URL exclusion rule in the form of a regular expression.
         * @type {string || null}
         */
        this.UrlExclude = null;

        /**
         * Log feature switch. 0: off; 1: on.
         * @type {number || null}
         */
        this.IsRelatedLog = null;

        /**
         * Log source.	
         * @type {string || null}
         */
        this.LogSource = null;

        /**
         * Log set. 
         * @type {string || null}
         */
        this.LogSet = null;

        /**
         * Log topic.
         * @type {string || null}
         */
        this.LogTopicID = null;

        /**
         * Method stack snapshot switch: true to enable, false to disable.
         * @type {boolean || null}
         */
        this.SnapshotEnable = null;

        /**
         * Slow call listening trigger threshold.
         * @type {number || null}
         */
        this.SnapshotTimeout = null;

        /**
         * Probe master switch.
         * @type {boolean || null}
         */
        this.AgentEnable = null;

        /**
         * Component list switch (deprecated).
         * @type {Array.<Instrument> || null}
         */
        this.InstrumentList = null;

        /**
         * Link compression switch (deprecated).
         * @type {boolean || null}
         */
        this.TraceSquash = null;

        /**
         * Specifies the memory threshold for probe fusing.
         * @type {number || null}
         */
        this.DisableMemoryUsed = null;

        /**
         * Specifies the CPU threshold for probe fusing.
         * @type {number || null}
         */
        this.DisableCpuUsed = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceKey = 'InstanceKey' in params ? params.InstanceKey : null;
        this.ServiceName = 'ServiceName' in params ? params.ServiceName : null;
        this.OperationNameFilter = 'OperationNameFilter' in params ? params.OperationNameFilter : null;
        this.ExceptionFilter = 'ExceptionFilter' in params ? params.ExceptionFilter : null;
        this.ErrorCodeFilter = 'ErrorCodeFilter' in params ? params.ErrorCodeFilter : null;
        this.EventEnable = 'EventEnable' in params ? params.EventEnable : null;
        this.UrlConvergenceSwitch = 'UrlConvergenceSwitch' in params ? params.UrlConvergenceSwitch : null;
        this.UrlConvergenceThreshold = 'UrlConvergenceThreshold' in params ? params.UrlConvergenceThreshold : null;
        this.UrlConvergence = 'UrlConvergence' in params ? params.UrlConvergence : null;
        this.UrlExclude = 'UrlExclude' in params ? params.UrlExclude : null;
        this.IsRelatedLog = 'IsRelatedLog' in params ? params.IsRelatedLog : null;
        this.LogSource = 'LogSource' in params ? params.LogSource : null;
        this.LogSet = 'LogSet' in params ? params.LogSet : null;
        this.LogTopicID = 'LogTopicID' in params ? params.LogTopicID : null;
        this.SnapshotEnable = 'SnapshotEnable' in params ? params.SnapshotEnable : null;
        this.SnapshotTimeout = 'SnapshotTimeout' in params ? params.SnapshotTimeout : null;
        this.AgentEnable = 'AgentEnable' in params ? params.AgentEnable : null;

        if (params.InstrumentList) {
            this.InstrumentList = new Array();
            for (let z in params.InstrumentList) {
                let obj = new Instrument();
                obj.deserialize(params.InstrumentList[z]);
                this.InstrumentList.push(obj);
            }
        }
        this.TraceSquash = 'TraceSquash' in params ? params.TraceSquash : null;
        this.DisableMemoryUsed = 'DisableMemoryUsed' in params ? params.DisableMemoryUsed : null;
        this.DisableCpuUsed = 'DisableCpuUsed' in params ? params.DisableCpuUsed : null;

    }
}

/**
 * Metric list cell.
 * @class
 */
class ApmMetricRecord extends  AbstractModel {
    constructor(){
        super();

        /**
         * Field array, used for the query result of indicators.
         * @type {Array.<ApmField> || null}
         */
        this.Fields = null;

        /**
         * Tag array, used to distinguish the objects of groupby.
         * @type {Array.<ApmTag> || null}
         */
        this.Tags = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Fields) {
            this.Fields = new Array();
            for (let z in params.Fields) {
                let obj = new ApmField();
                obj.deserialize(params.Fields[z]);
                this.Fields.push(obj);
            }
        }

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new ApmTag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }

    }
}

/**
 * DescribeServiceOverview request structure.
 * @class
 */
class DescribeServiceOverviewRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Metric list.
         * @type {Array.<QueryMetricItem> || null}
         */
        this.Metrics = null;

        /**
         * Business system id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Aggregation dimension.
         * @type {Array.<string> || null}
         */
        this.GroupBy = null;

        /**
         * Start time (unit: sec).
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * End time (unit: seconds).
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Filter criteria.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Sorting method
.
Value: fill in.
-Asc: sorts query metrics in ascending order.
- desc: sort query metrics in descending order.
         * @type {OrderBy || null}
         */
        this.OrderBy = null;

        /**
         * Page size.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Paging starting point.
         * @type {number || null}
         */
        this.Offset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Metrics) {
            this.Metrics = new Array();
            for (let z in params.Metrics) {
                let obj = new QueryMetricItem();
                obj.deserialize(params.Metrics[z]);
                this.Metrics.push(obj);
            }
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.GroupBy = 'GroupBy' in params ? params.GroupBy : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

        if (params.OrderBy) {
            let obj = new OrderBy();
            obj.deserialize(params.OrderBy)
            this.OrderBy = obj;
        }
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

    }
}

/**
 * DescribeApmSampleConfig response structure.
 * @class
 */
class DescribeApmSampleConfigResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Sampling configuration list
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ApmSampleConfig> || null}
         */
        this.ApmSampleConfigs = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ApmSampleConfigs) {
            this.ApmSampleConfigs = new Array();
            for (let z in params.ApmSampleConfigs) {
                let obj = new ApmSampleConfig();
                obj.deserialize(params.ApmSampleConfigs[z]);
                this.ApmSampleConfigs.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeApmAgent response structure.
 * @class
 */
class DescribeApmAgentResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Agent information.
         * @type {ApmAgentInfo || null}
         */
        this.ApmAgent = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ApmAgent) {
            let obj = new ApmAgentInfo();
            obj.deserialize(params.ApmAgent)
            this.ApmAgent = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateApmSampleConfig request structure.
 * @class
 */
class CreateApmSampleConfigRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Business system ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Sampling rate.
         * @type {number || null}
         */
        this.SampleRate = null;

        /**
         * Application name
         * @type {string || null}
         */
        this.ServiceName = null;

        /**
         * Sampling rule name.
         * @type {string || null}
         */
        this.SampleName = null;

        /**
         * Sampling tags
         * @type {Array.<APMKVItem> || null}
         */
        this.Tags = null;

        /**
         * API name.
         * @type {string || null}
         */
        this.OperationName = null;

        /**
         * 0: exact match (default); 1: prefix match; 2: suffix match.
         * @type {number || null}
         */
        this.OperationType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.SampleRate = 'SampleRate' in params ? params.SampleRate : null;
        this.ServiceName = 'ServiceName' in params ? params.ServiceName : null;
        this.SampleName = 'SampleName' in params ? params.SampleName : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new APMKVItem();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.OperationName = 'OperationName' in params ? params.OperationName : null;
        this.OperationType = 'OperationType' in params ? params.OperationType : null;

    }
}

/**
 * DescribeApmSampleConfig request structure.
 * @class
 */
class DescribeApmSampleConfigRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Business system ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Sampling rule name.
         * @type {string || null}
         */
        this.SampleName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.SampleName = 'SampleName' in params ? params.SampleName : null;

    }
}

/**
 * ModifyApmInstance response structure.
 * @class
 */
class ModifyApmInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Span log section.


 * @class
 */
class SpanLog extends  AbstractModel {
    constructor(){
        super();

        /**
         * Log timestamp.
         * @type {number || null}
         */
        this.Timestamp = null;

        /**
         * Tag.
         * @type {Array.<SpanTag> || null}
         */
        this.Fields = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Timestamp = 'Timestamp' in params ? params.Timestamp : null;

        if (params.Fields) {
            this.Fields = new Array();
            for (let z in params.Fields) {
                let obj = new SpanTag();
                obj.deserialize(params.Fields[z]);
                this.Fields.push(obj);
            }
        }

    }
}

/**
 * APM application metric information.
 * @class
 */
class ApmServiceMetric extends  AbstractModel {
    constructor(){
        super();

        /**
         * Field array.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ApmField> || null}
         */
        this.Fields = null;

        /**
         * Tag array
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ApmTag> || null}
         */
        this.Tags = null;

        /**
         * Application information
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ServiceDetail || null}
         */
        this.ServiceDetail = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Fields) {
            this.Fields = new Array();
            for (let z in params.Fields) {
                let obj = new ApmField();
                obj.deserialize(params.Fields[z]);
                this.Fields.push(obj);
            }
        }

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new ApmTag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }

        if (params.ServiceDetail) {
            let obj = new ServiceDetail();
            obj.deserialize(params.ServiceDetail)
            this.ServiceDetail = obj;
        }

    }
}

/**
 * ModifyApmSampleConfig response structure.
 * @class
 */
class ModifyApmSampleConfigResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Querying application configuration response parameters structure.
 * @class
 */
class ApmAppConfig extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceKey = null;

        /**
         * Service name.
         * @type {string || null}
         */
        this.ServiceName = null;

        /**
         * URL convergence switch.
         * @type {number || null}
         */
        this.UrlConvergenceSwitch = null;

        /**
         * URL convergence threshold
         * @type {number || null}
         */
        this.UrlConvergenceThreshold = null;

        /**
         * URL convergence regular expression.
         * @type {string || null}
         */
        this.UrlConvergence = null;

        /**
         * Exception filtering regular expression.
         * @type {string || null}
         */
        this.ExceptionFilter = null;

        /**
         * Error code filtering.
         * @type {string || null}
         */
        this.ErrorCodeFilter = null;

        /**
         * Service component type.
         * @type {string || null}
         */
        this.Components = null;

        /**
         * URL exclusion regular.
         * @type {string || null}
         */
        this.UrlExclude = null;

        /**
         * Specifies the log source.
         * @type {string || null}
         */
        this.LogSource = null;

        /**
         * Log region.
         * @type {string || null}
         */
        this.LogRegion = null;

        /**
         * Whether logging is enabled. valid values: 0 (disabled), 1 (enabled).
         * @type {number || null}
         */
        this.IsRelatedLog = null;

        /**
         * Log topic ID
         * @type {string || null}
         */
        this.LogTopicID = null;

        /**
         * API names to filter
         * @type {string || null}
         */
        this.IgnoreOperationName = null;

        /**
         * CLS log set/ES cluster ID
         * @type {string || null}
         */
        this.LogSet = null;

        /**
         * Number of traces reported by the probe per second.
         * @type {number || null}
         */
        this.TraceRateLimit = null;

        /**
         * Whether thread profiling is enabled.
         * @type {boolean || null}
         */
        this.EnableSnapshot = null;

        /**
         * Timeout threshold for thread profiling.
         * @type {number || null}
         */
        this.SnapshotTimeout = null;

        /**
         * Whether agent is enabled.
         * @type {boolean || null}
         */
        this.AgentEnable = null;

        /**
         * Component List
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Instrument> || null}
         */
        this.InstrumentList = null;

        /**
         * Whether link compression is enabled.
         * @type {boolean || null}
         */
        this.TraceSquash = null;

        /**
         * Whether application diagnosis is enabled.
         * @type {boolean || null}
         */
        this.EventEnable = null;

        /**
         * Related configurations of the probe APIs.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {AgentOperationConfigView || null}
         */
        this.AgentOperationConfigView = null;

        /**
         * Whether to enable application log configuration.
         * @type {boolean || null}
         */
        this.EnableLogConfig = null;

        /**
         * Application ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ServiceID = null;

        /**
         * Whether to enable the dashboard configuration for applications. false: disabled (consistent with the business system configuration); true: enabled (application-level configuration).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.EnableDashboardConfig = null;

        /**
         * Whether to associate with Dashboard. 0: disabled; 1: enabled.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsRelatedDashboard = null;

        /**
         * dashboard ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DashboardTopicID = null;

        /**
         * Whether to enable the application-level configuration.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.EnableSecurityConfig = null;

        /**
         * Whether to enable detection of component vulnerability.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsInstrumentationVulnerabilityScan = null;

        /**
         * Whether to enable SQL injection analysis.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsSqlInjectionAnalysis = null;

        /**
         * Whether to enable execution analysis of remote command.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsRemoteCommandExecutionAnalysis = null;

        /**
         * Whether to enable detection analysis of Java webshell.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsMemoryHijackingAnalysis = null;

        /**
         * CLS index type. (0 = full-text index; 1 = key-value index).
         * @type {number || null}
         */
        this.LogIndexType = null;

        /**
         * Index key of traceId. It is valid when the CLS index type is key-value index.
         * @type {string || null}
         */
        this.LogTraceIdKey = null;

        /**
         * Whether to enable the detection of deleting arbitrary files. (0 - disabled; 1: enabled.)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsDeleteAnyFileAnalysis = null;

        /**
         * Whether to enable the detection of reading arbitrary files. (0 - disabled; 1 - enabled.)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsReadAnyFileAnalysis = null;

        /**
         * Whether to enable the detection of uploading arbitrary files. (0 - disabled; 1 - enabled.)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsUploadAnyFileAnalysis = null;

        /**
         * Whether to enable the detection of the inclusion of arbitrary files. (0: disabled, 1: enabled.)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsIncludeAnyFileAnalysis = null;

        /**
         * Whether to enable traversal detection of the directory. (0 - disabled; 1 - enabled).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsDirectoryTraversalAnalysis = null;

        /**
         * Whether to enable template engine injection detection. (0: disabled; 1: enabled.)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsTemplateEngineInjectionAnalysis = null;

        /**
         * Whether to enable script engine injection detection. (0 - disabled; 1 - enabled.)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsScriptEngineInjectionAnalysis = null;

        /**
         * Whether to enable expression injection detection. (0 - disabled; 1 - enabled.)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsExpressionInjectionAnalysis = null;

        /**
         * Whether to enable JNDI injection detection. (0 - disabled; 1 - enabled.)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsJNDIInjectionAnalysis = null;

        /**
         * Whether to enable JNI injection detection. (0 - disabled, 1 - enabled).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsJNIInjectionAnalysis = null;

        /**
         * Whether to enable Webshell backdoor detection. (0 - disabled; 1 - enabled).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsWebshellBackdoorAnalysis = null;

        /**
         * Whether to enable deserialization detection. (0 - disabled; 1 - enabled).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsDeserializationAnalysis = null;

        /**
         * API name automatic convergence switch (0 - disabled; 1 - enabled)
         * @type {boolean || null}
         */
        this.UrlAutoConvergenceEnable = null;

        /**
         * Convergence threshold for URL long segments.
         * @type {number || null}
         */
        this.UrlLongSegmentThreshold = null;

        /**
         * Convergence threshold for URL numerical segments.
         * @type {number || null}
         */
        this.UrlNumberSegmentThreshold = null;

        /**
         * Specifies the memory threshold for probe fusing.
         * @type {number || null}
         */
        this.DisableMemoryUsed = null;

        /**
         * Specifies the CPU threshold for probe fusing.
         * @type {number || null}
         */
        this.DisableCpuUsed = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceKey = 'InstanceKey' in params ? params.InstanceKey : null;
        this.ServiceName = 'ServiceName' in params ? params.ServiceName : null;
        this.UrlConvergenceSwitch = 'UrlConvergenceSwitch' in params ? params.UrlConvergenceSwitch : null;
        this.UrlConvergenceThreshold = 'UrlConvergenceThreshold' in params ? params.UrlConvergenceThreshold : null;
        this.UrlConvergence = 'UrlConvergence' in params ? params.UrlConvergence : null;
        this.ExceptionFilter = 'ExceptionFilter' in params ? params.ExceptionFilter : null;
        this.ErrorCodeFilter = 'ErrorCodeFilter' in params ? params.ErrorCodeFilter : null;
        this.Components = 'Components' in params ? params.Components : null;
        this.UrlExclude = 'UrlExclude' in params ? params.UrlExclude : null;
        this.LogSource = 'LogSource' in params ? params.LogSource : null;
        this.LogRegion = 'LogRegion' in params ? params.LogRegion : null;
        this.IsRelatedLog = 'IsRelatedLog' in params ? params.IsRelatedLog : null;
        this.LogTopicID = 'LogTopicID' in params ? params.LogTopicID : null;
        this.IgnoreOperationName = 'IgnoreOperationName' in params ? params.IgnoreOperationName : null;
        this.LogSet = 'LogSet' in params ? params.LogSet : null;
        this.TraceRateLimit = 'TraceRateLimit' in params ? params.TraceRateLimit : null;
        this.EnableSnapshot = 'EnableSnapshot' in params ? params.EnableSnapshot : null;
        this.SnapshotTimeout = 'SnapshotTimeout' in params ? params.SnapshotTimeout : null;
        this.AgentEnable = 'AgentEnable' in params ? params.AgentEnable : null;

        if (params.InstrumentList) {
            this.InstrumentList = new Array();
            for (let z in params.InstrumentList) {
                let obj = new Instrument();
                obj.deserialize(params.InstrumentList[z]);
                this.InstrumentList.push(obj);
            }
        }
        this.TraceSquash = 'TraceSquash' in params ? params.TraceSquash : null;
        this.EventEnable = 'EventEnable' in params ? params.EventEnable : null;

        if (params.AgentOperationConfigView) {
            let obj = new AgentOperationConfigView();
            obj.deserialize(params.AgentOperationConfigView)
            this.AgentOperationConfigView = obj;
        }
        this.EnableLogConfig = 'EnableLogConfig' in params ? params.EnableLogConfig : null;
        this.ServiceID = 'ServiceID' in params ? params.ServiceID : null;
        this.EnableDashboardConfig = 'EnableDashboardConfig' in params ? params.EnableDashboardConfig : null;
        this.IsRelatedDashboard = 'IsRelatedDashboard' in params ? params.IsRelatedDashboard : null;
        this.DashboardTopicID = 'DashboardTopicID' in params ? params.DashboardTopicID : null;
        this.EnableSecurityConfig = 'EnableSecurityConfig' in params ? params.EnableSecurityConfig : null;
        this.IsInstrumentationVulnerabilityScan = 'IsInstrumentationVulnerabilityScan' in params ? params.IsInstrumentationVulnerabilityScan : null;
        this.IsSqlInjectionAnalysis = 'IsSqlInjectionAnalysis' in params ? params.IsSqlInjectionAnalysis : null;
        this.IsRemoteCommandExecutionAnalysis = 'IsRemoteCommandExecutionAnalysis' in params ? params.IsRemoteCommandExecutionAnalysis : null;
        this.IsMemoryHijackingAnalysis = 'IsMemoryHijackingAnalysis' in params ? params.IsMemoryHijackingAnalysis : null;
        this.LogIndexType = 'LogIndexType' in params ? params.LogIndexType : null;
        this.LogTraceIdKey = 'LogTraceIdKey' in params ? params.LogTraceIdKey : null;
        this.IsDeleteAnyFileAnalysis = 'IsDeleteAnyFileAnalysis' in params ? params.IsDeleteAnyFileAnalysis : null;
        this.IsReadAnyFileAnalysis = 'IsReadAnyFileAnalysis' in params ? params.IsReadAnyFileAnalysis : null;
        this.IsUploadAnyFileAnalysis = 'IsUploadAnyFileAnalysis' in params ? params.IsUploadAnyFileAnalysis : null;
        this.IsIncludeAnyFileAnalysis = 'IsIncludeAnyFileAnalysis' in params ? params.IsIncludeAnyFileAnalysis : null;
        this.IsDirectoryTraversalAnalysis = 'IsDirectoryTraversalAnalysis' in params ? params.IsDirectoryTraversalAnalysis : null;
        this.IsTemplateEngineInjectionAnalysis = 'IsTemplateEngineInjectionAnalysis' in params ? params.IsTemplateEngineInjectionAnalysis : null;
        this.IsScriptEngineInjectionAnalysis = 'IsScriptEngineInjectionAnalysis' in params ? params.IsScriptEngineInjectionAnalysis : null;
        this.IsExpressionInjectionAnalysis = 'IsExpressionInjectionAnalysis' in params ? params.IsExpressionInjectionAnalysis : null;
        this.IsJNDIInjectionAnalysis = 'IsJNDIInjectionAnalysis' in params ? params.IsJNDIInjectionAnalysis : null;
        this.IsJNIInjectionAnalysis = 'IsJNIInjectionAnalysis' in params ? params.IsJNIInjectionAnalysis : null;
        this.IsWebshellBackdoorAnalysis = 'IsWebshellBackdoorAnalysis' in params ? params.IsWebshellBackdoorAnalysis : null;
        this.IsDeserializationAnalysis = 'IsDeserializationAnalysis' in params ? params.IsDeserializationAnalysis : null;
        this.UrlAutoConvergenceEnable = 'UrlAutoConvergenceEnable' in params ? params.UrlAutoConvergenceEnable : null;
        this.UrlLongSegmentThreshold = 'UrlLongSegmentThreshold' in params ? params.UrlLongSegmentThreshold : null;
        this.UrlNumberSegmentThreshold = 'UrlNumberSegmentThreshold' in params ? params.UrlNumberSegmentThreshold : null;
        this.DisableMemoryUsed = 'DisableMemoryUsed' in params ? params.DisableMemoryUsed : null;
        this.DisableCpuUsed = 'DisableCpuUsed' in params ? params.DisableCpuUsed : null;

    }
}

/**
 * CreateApmSampleConfig response structure.
 * @class
 */
class CreateApmSampleConfigResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Sampling configuration parameter
         * @type {ApmSampleConfig || null}
         */
        this.ApmSampleConfig = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ApmSampleConfig) {
            let obj = new ApmSampleConfig();
            obj.deserialize(params.ApmSampleConfig)
            this.ApmSampleConfig = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeApmApplicationConfig request structure.
 * @class
 */
class DescribeApmApplicationConfigRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Service name
         * @type {string || null}
         */
        this.ServiceName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ServiceName = 'ServiceName' in params ? params.ServiceName : null;

    }
}

/**
 * Queries filter parameters.
 * @class
 */
class Filter extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filtering method (=, !=, in).
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Filter dimension name.
         * @type {string || null}
         */
        this.Key = null;

        /**
         * Filter value. uses commas to separate multiple values in in filtering method.
         * @type {string || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Type = 'Type' in params ? params.Type : null;
        this.Key = 'Key' in params ? params.Key : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * Metric dimension information.
 * @class
 */
class ApmField extends  AbstractModel {
    constructor(){
        super();

        /**
         * Metric name.
         * @type {string || null}
         */
        this.Key = null;

        /**
         * Indicator numerical value.
         * @type {number || null}
         */
        this.Value = null;

        /**
         * Units corresponding to the metric.
         * @type {string || null}
         */
        this.Unit = null;

        /**
         * Year-Over-Year result array, recommended to use.
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {Array.<APMKVItem> || null}
         */
        this.CompareVals = null;

        /**
         * Indicator numerical value of the previous period in year-over-year comparison.
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {Array.<APMKV> || null}
         */
        this.LastPeriodValue = null;

        /**
         * Year-On-Year metric value. deprecated, not recommended for use.
         * @type {string || null}
         */
        this.CompareVal = null;

        /**
         * Metric Chinese Name
         * @type {string || null}
         */
        this.NameCN = null;

        /**
         * Metric English name
         * @type {string || null}
         */
        this.NameEN = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Key = 'Key' in params ? params.Key : null;
        this.Value = 'Value' in params ? params.Value : null;
        this.Unit = 'Unit' in params ? params.Unit : null;

        if (params.CompareVals) {
            this.CompareVals = new Array();
            for (let z in params.CompareVals) {
                let obj = new APMKVItem();
                obj.deserialize(params.CompareVals[z]);
                this.CompareVals.push(obj);
            }
        }

        if (params.LastPeriodValue) {
            this.LastPeriodValue = new Array();
            for (let z in params.LastPeriodValue) {
                let obj = new APMKV();
                obj.deserialize(params.LastPeriodValue[z]);
                this.LastPeriodValue.push(obj);
            }
        }
        this.CompareVal = 'CompareVal' in params ? params.CompareVal : null;
        this.NameCN = 'NameCN' in params ? params.NameCN : null;
        this.NameEN = 'NameEN' in params ? params.NameEN : null;

    }
}

/**
 * Metric curve data.
 * @class
 */
class Line extends  AbstractModel {
    constructor(){
        super();

        /**
         * Metric name.
         * @type {string || null}
         */
        this.MetricName = null;

        /**
         * Metric chinese name.
         * @type {string || null}
         */
        this.MetricNameCN = null;

        /**
         * Time series.
         * @type {Array.<number> || null}
         */
        this.TimeSerial = null;

        /**
         * Data sequence.
         * @type {Array.<number> || null}
         */
        this.DataSerial = null;

        /**
         * Dimension list.
         * @type {Array.<ApmTag> || null}
         */
        this.Tags = null;

        /**
         * Metric data unit
         * @type {string || null}
         */
        this.MetricUnit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MetricName = 'MetricName' in params ? params.MetricName : null;
        this.MetricNameCN = 'MetricNameCN' in params ? params.MetricNameCN : null;
        this.TimeSerial = 'TimeSerial' in params ? params.TimeSerial : null;
        this.DataSerial = 'DataSerial' in params ? params.DataSerial : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new ApmTag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.MetricUnit = 'MetricUnit' in params ? params.MetricUnit : null;

    }
}

/**
 * DescribeGeneralSpanList response structure.
 * @class
 */
class DescribeGeneralSpanListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Span pagination list.
         * @type {Array.<Span> || null}
         */
        this.Spans = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Spans) {
            this.Spans = new Array();
            for (let z in params.Spans) {
                let obj = new Span();
                obj.deserialize(params.Spans[z]);
                this.Spans.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateProfileTask response structure.
 * @class
 */
class CreateProfileTaskResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task ID
         * @type {number || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeGeneralSpanList request structure.
 * @class
 */
class DescribeGeneralSpanListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Business system id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Span query start timestamp (unit: seconds).
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * Span query end timestamp (unit: seconds).
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Universal filter parameters.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Sort
.
The currently supported keys are:.

-StartTime (start time).
-EndTime (end time).
-Duration (response time).

The currently supported values are:.

- desc: sort in descending order.
-Asc - ascending order.
         * @type {OrderBy || null}
         */
        this.OrderBy = null;

        /**
         * The service name of the business itself. console users should fill in taw.
         * @type {string || null}
         */
        this.BusinessName = null;

        /**
         * Number of items per page, defaults to 10,000, valid values are 0 to 10,000.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Pagination.
         * @type {number || null}
         */
        this.Offset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

        if (params.OrderBy) {
            let obj = new OrderBy();
            obj.deserialize(params.OrderBy)
            this.OrderBy = obj;
        }
        this.BusinessName = 'BusinessName' in params ? params.BusinessName : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

    }
}

/**
 * ModifyApmPrometheusRule response structure.
 * @class
 */
class ModifyApmPrometheusRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Shows the association between the apm business system and other cloud products in the return format.
 * @class
 */
class ApmAssociation extends  AbstractModel {
    constructor(){
        super();

        /**
         * Associated product instance ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PeerId = null;

        /**
         * Association status: 1 (enabled), 2 (disabled), 3 (invalid).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Specifies the CKafka message topic.
         * @type {string || null}
         */
        this.Topic = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PeerId = 'PeerId' in params ? params.PeerId : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Topic = 'Topic' in params ? params.Topic : null;

    }
}

/**
 * Sorting fields.
 * @class
 */
class OrderBy extends  AbstractModel {
    constructor(){
        super();

        /**
         * Sort field (starttime, endtime, duration are supported).
         * @type {string || null}
         */
        this.Key = null;

        /**
         * ASC: sequential sorting / desc: reverse sorting.
         * @type {string || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Key = 'Key' in params ? params.Key : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * DescribeServiceOverview response structure.
 * @class
 */
class DescribeServiceOverviewResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Indicator result set.
         * @type {Array.<ApmMetricRecord> || null}
         */
        this.Records = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Records) {
            this.Records = new Array();
            for (let z in params.Records) {
                let obj = new ApmMetricRecord();
                obj.deserialize(params.Records[z]);
                this.Records.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeApmServiceMetric response structure.
 * @class
 */
class DescribeApmServiceMetricResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of application metrics.
         * @type {Array.<ApmServiceMetric> || null}
         */
        this.ServiceMetricList = null;

        /**
         * Number of applications meeting the filtering conditions.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Warning of the abnormal number of applications.
         * @type {number || null}
         */
        this.WarningErrorCount = null;

        /**
         * Total number of applications.
         * @type {number || null}
         */
        this.ApplicationCount = null;

        /**
         * Page number.
         * @type {number || null}
         */
        this.Page = null;

        /**
         * Page size.
         * @type {number || null}
         */
        this.PageSize = null;

        /**
         * Indicates the number of abnormal applications.
         * @type {number || null}
         */
        this.ErrorCount = null;

        /**
         * Warning of the number of applications.
         * @type {number || null}
         */
        this.WarningCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ServiceMetricList) {
            this.ServiceMetricList = new Array();
            for (let z in params.ServiceMetricList) {
                let obj = new ApmServiceMetric();
                obj.deserialize(params.ServiceMetricList[z]);
                this.ServiceMetricList.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.WarningErrorCount = 'WarningErrorCount' in params ? params.WarningErrorCount : null;
        this.ApplicationCount = 'ApplicationCount' in params ? params.ApplicationCount : null;
        this.Page = 'Page' in params ? params.Page : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;
        this.ErrorCount = 'ErrorCount' in params ? params.ErrorCount : null;
        this.WarningCount = 'WarningCount' in params ? params.WarningCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyApmAssociation response structure.
 * @class
 */
class ModifyApmAssociationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeMetricRecords response structure.
 * @class
 */
class DescribeMetricRecordsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Indicator result set.
         * @type {Array.<ApmMetricRecord> || null}
         */
        this.Records = null;

        /**
         * Number of metric query result sets.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Records) {
            this.Records = new Array();
            for (let z in params.Records) {
                let obj = new ApmMetricRecord();
                obj.deserialize(params.Records[z]);
                this.Records.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeGeneralOTSpanList response structure.
 * @class
 */
class DescribeGeneralOTSpanListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The Spans field contains the entire content of the link data. since the data is compressed, perform the following three steps to switch back to the original text.
Decode the text in the Spans field with Base64 to get the compressed byte[].
Use gzip to decompress the compressed byte array and get the byte array before compression.
Uses UTF-8 character set to convert byte[] before compression to text.

         * @type {string || null}
         */
        this.Spans = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.Spans = 'Spans' in params ? params.Spans : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Dimension (tag) object.
 * @class
 */
class ApmTag extends  AbstractModel {
    constructor(){
        super();

        /**
         * Dimension key (column name, Tag key).
         * @type {string || null}
         */
        this.Key = null;

        /**
         * Dimension value (tag value).
         * @type {string || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Key = 'Key' in params ? params.Key : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * ModifyApmApplicationConfig response structure.
 * @class
 */
class ModifyApmApplicationConfigResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeApmApplicationConfig response structure.
 * @class
 */
class DescribeApmApplicationConfigResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Apm application configuration.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ApmAppConfig || null}
         */
        this.ApmAppConfig = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ApmAppConfig) {
            let obj = new ApmAppConfig();
            obj.deserialize(params.ApmAppConfig)
            this.ApmAppConfig = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeApmAssociation request structure.
 * @class
 */
class DescribeApmAssociationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Associated product name. currently only supports Prometheus.
         * @type {string || null}
         */
        this.ProductName = null;

        /**
         * Business System Name
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProductName = 'ProductName' in params ? params.ProductName : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * ModifyApmApplicationConfig request structure.
 * @class
 */
class ModifyApmApplicationConfigRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Business system ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Application name
         * @type {string || null}
         */
        this.ServiceName = null;

        /**
         * URL convergence switch. 0: Off; 1: On
         * @type {number || null}
         */
        this.UrlConvergenceSwitch = null;

        /**
         * URL convergence threshold
         * @type {number || null}
         */
        this.UrlConvergenceThreshold = null;

        /**
         * Regex rules for exception filtering, separated by commas
         * @type {string || null}
         */
        this.ExceptionFilter = null;

        /**
         * Regex rules for URL convergence, separated by commas
         * @type {string || null}
         */
        this.UrlConvergence = null;

        /**
         * Error code filtering, separated by commas
         * @type {string || null}
         */
        this.ErrorCodeFilter = null;

        /**
         * Regex rules for URL exclusion, separated by commas
         * @type {string || null}
         */
        this.UrlExclude = null;

        /**
         * Log switch. 0: Off; 1: On
         * @type {number || null}
         */
        this.IsRelatedLog = null;

        /**
         * Log region.
         * @type {string || null}
         */
        this.LogRegion = null;

        /**
         * Log topic ID
         * @type {string || null}
         */
        this.LogTopicID = null;

        /**
         * CLS log set/ES cluster ID
         * @type {string || null}
         */
        this.LogSet = null;

        /**
         * Log source: CLS or ES
         * @type {string || null}
         */
        this.LogSource = null;

        /**
         * APIs to be filtered
         * @type {string || null}
         */
        this.IgnoreOperationName = null;

        /**
         * Whether thread profiling is enabled.
         * @type {boolean || null}
         */
        this.EnableSnapshot = null;

        /**
         * Timeout threshold for thread profiling.
         * @type {number || null}
         */
        this.SnapshotTimeout = null;

        /**
         * Whether agent is enabled.
         * @type {boolean || null}
         */
        this.AgentEnable = null;

        /**
         * Whether link compression is enabled.
         * @type {boolean || null}
         */
        this.TraceSquash = null;

        /**
         * Switch for enabling application diagnosis.
         * @type {boolean || null}
         */
        this.EventEnable = null;

        /**
         * Component List
         * @type {Array.<Instrument> || null}
         */
        this.InstrumentList = null;

        /**
         * Related configurations of the probe APIs.
         * @type {AgentOperationConfigView || null}
         */
        this.AgentOperationConfigView = null;

        /**
         * Whether to enable application log configuration.
         * @type {boolean || null}
         */
        this.EnableLogConfig = null;

        /**
         * Whether to enable the dashboard configuration for applications. false: disabled (consistent with the business system configuration); true: enabled (application-level configuration).
         * @type {boolean || null}
         */
        this.EnableDashboardConfig = null;

        /**
         * Whether to associate with Dashboard. 0: disabled; 1: enabled.
         * @type {number || null}
         */
        this.IsRelatedDashboard = null;

        /**
         * dashboard ID
         * @type {string || null}
         */
        this.DashboardTopicID = null;

        /**
         * CLS index type. (0 = full-text index; 1 = key-value index).
         * @type {number || null}
         */
        this.LogIndexType = null;

        /**
         * Index key of traceId. It is valid when the CLS index type is key-value index.
         * @type {string || null}
         */
        this.LogTraceIdKey = null;

        /**
         * Whether to enable the application security configuration.
         * @type {boolean || null}
         */
        this.EnableSecurityConfig = null;

        /**
         * Whether to enable SQL injection analysis.
         * @type {number || null}
         */
        this.IsSqlInjectionAnalysis = null;

        /**
         * Whether to enable detection of component vulnerability.
         * @type {number || null}
         */
        this.IsInstrumentationVulnerabilityScan = null;

        /**
         * Whether remote command detection is enabled.
         * @type {number || null}
         */
        this.IsRemoteCommandExecutionAnalysis = null;

        /**
         * Whether to enable detection of Java webshell.
         * @type {number || null}
         */
        this.IsMemoryHijackingAnalysis = null;

        /**
         * Whether to enable the detection of deleting arbitrary files. (0 - disabled; 1: enabled.)
         * @type {number || null}
         */
        this.IsDeleteAnyFileAnalysis = null;

        /**
         * Whether to enable the detection of reading arbitrary files. (0 - disabled; 1 - enabled.)
         * @type {number || null}
         */
        this.IsReadAnyFileAnalysis = null;

        /**
         * Whether to enable the detection of uploading arbitrary files. (0 - disabled; 1 - enabled.)
         * @type {number || null}
         */
        this.IsUploadAnyFileAnalysis = null;

        /**
         * Whether to enable the detection of the inclusion of arbitrary files. (0: disabled, 1: enabled.)
         * @type {number || null}
         */
        this.IsIncludeAnyFileAnalysis = null;

        /**
         * Whether to enable traversal detection of the directory. (0 - disabled; 1 - enabled).
         * @type {number || null}
         */
        this.IsDirectoryTraversalAnalysis = null;

        /**
         * Whether to enable template engine injection detection. (0: disabled; 1: enabled.)
         * @type {number || null}
         */
        this.IsTemplateEngineInjectionAnalysis = null;

        /**
         * Whether to enable script engine injection detection. (0 - disabled; 1 - enabled.)
         * @type {number || null}
         */
        this.IsScriptEngineInjectionAnalysis = null;

        /**
         * Whether to enable expression injection detection. (0 - disabled; 1 - enabled.)
         * @type {number || null}
         */
        this.IsExpressionInjectionAnalysis = null;

        /**
         * Whether to enable JNDI injection detection. (0 - disabled; 1 - enabled.)
         * @type {number || null}
         */
        this.IsJNDIInjectionAnalysis = null;

        /**
         * Whether to enable JNI injection detection. (0 - disabled, 1 - enabled).
         * @type {number || null}
         */
        this.IsJNIInjectionAnalysis = null;

        /**
         * Whether to enable Webshell backdoor detection. (0 - disabled; 1 - enabled).
         * @type {number || null}
         */
        this.IsWebshellBackdoorAnalysis = null;

        /**
         * Whether to enable deserialization detection. (0 - disabled; 1 - enabled).
         * @type {number || null}
         */
        this.IsDeserializationAnalysis = null;

        /**
         * Automatic convergence switch for APIs. 0: disabled | 1: enabled.
         * @type {boolean || null}
         */
        this.UrlAutoConvergenceEnable = null;

        /**
         * Convergence threshold for URL long segments.
         * @type {number || null}
         */
        this.UrlLongSegmentThreshold = null;

        /**
         * Convergence threshold for URL numerical segments.
         * @type {number || null}
         */
        this.UrlNumberSegmentThreshold = null;

        /**
         * Specifies the memory threshold for probe fusing.
         * @type {number || null}
         */
        this.DisableMemoryUsed = null;

        /**
         * Specifies the CPU threshold for probe fusing.
         * @type {number || null}
         */
        this.DisableCpuUsed = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ServiceName = 'ServiceName' in params ? params.ServiceName : null;
        this.UrlConvergenceSwitch = 'UrlConvergenceSwitch' in params ? params.UrlConvergenceSwitch : null;
        this.UrlConvergenceThreshold = 'UrlConvergenceThreshold' in params ? params.UrlConvergenceThreshold : null;
        this.ExceptionFilter = 'ExceptionFilter' in params ? params.ExceptionFilter : null;
        this.UrlConvergence = 'UrlConvergence' in params ? params.UrlConvergence : null;
        this.ErrorCodeFilter = 'ErrorCodeFilter' in params ? params.ErrorCodeFilter : null;
        this.UrlExclude = 'UrlExclude' in params ? params.UrlExclude : null;
        this.IsRelatedLog = 'IsRelatedLog' in params ? params.IsRelatedLog : null;
        this.LogRegion = 'LogRegion' in params ? params.LogRegion : null;
        this.LogTopicID = 'LogTopicID' in params ? params.LogTopicID : null;
        this.LogSet = 'LogSet' in params ? params.LogSet : null;
        this.LogSource = 'LogSource' in params ? params.LogSource : null;
        this.IgnoreOperationName = 'IgnoreOperationName' in params ? params.IgnoreOperationName : null;
        this.EnableSnapshot = 'EnableSnapshot' in params ? params.EnableSnapshot : null;
        this.SnapshotTimeout = 'SnapshotTimeout' in params ? params.SnapshotTimeout : null;
        this.AgentEnable = 'AgentEnable' in params ? params.AgentEnable : null;
        this.TraceSquash = 'TraceSquash' in params ? params.TraceSquash : null;
        this.EventEnable = 'EventEnable' in params ? params.EventEnable : null;

        if (params.InstrumentList) {
            this.InstrumentList = new Array();
            for (let z in params.InstrumentList) {
                let obj = new Instrument();
                obj.deserialize(params.InstrumentList[z]);
                this.InstrumentList.push(obj);
            }
        }

        if (params.AgentOperationConfigView) {
            let obj = new AgentOperationConfigView();
            obj.deserialize(params.AgentOperationConfigView)
            this.AgentOperationConfigView = obj;
        }
        this.EnableLogConfig = 'EnableLogConfig' in params ? params.EnableLogConfig : null;
        this.EnableDashboardConfig = 'EnableDashboardConfig' in params ? params.EnableDashboardConfig : null;
        this.IsRelatedDashboard = 'IsRelatedDashboard' in params ? params.IsRelatedDashboard : null;
        this.DashboardTopicID = 'DashboardTopicID' in params ? params.DashboardTopicID : null;
        this.LogIndexType = 'LogIndexType' in params ? params.LogIndexType : null;
        this.LogTraceIdKey = 'LogTraceIdKey' in params ? params.LogTraceIdKey : null;
        this.EnableSecurityConfig = 'EnableSecurityConfig' in params ? params.EnableSecurityConfig : null;
        this.IsSqlInjectionAnalysis = 'IsSqlInjectionAnalysis' in params ? params.IsSqlInjectionAnalysis : null;
        this.IsInstrumentationVulnerabilityScan = 'IsInstrumentationVulnerabilityScan' in params ? params.IsInstrumentationVulnerabilityScan : null;
        this.IsRemoteCommandExecutionAnalysis = 'IsRemoteCommandExecutionAnalysis' in params ? params.IsRemoteCommandExecutionAnalysis : null;
        this.IsMemoryHijackingAnalysis = 'IsMemoryHijackingAnalysis' in params ? params.IsMemoryHijackingAnalysis : null;
        this.IsDeleteAnyFileAnalysis = 'IsDeleteAnyFileAnalysis' in params ? params.IsDeleteAnyFileAnalysis : null;
        this.IsReadAnyFileAnalysis = 'IsReadAnyFileAnalysis' in params ? params.IsReadAnyFileAnalysis : null;
        this.IsUploadAnyFileAnalysis = 'IsUploadAnyFileAnalysis' in params ? params.IsUploadAnyFileAnalysis : null;
        this.IsIncludeAnyFileAnalysis = 'IsIncludeAnyFileAnalysis' in params ? params.IsIncludeAnyFileAnalysis : null;
        this.IsDirectoryTraversalAnalysis = 'IsDirectoryTraversalAnalysis' in params ? params.IsDirectoryTraversalAnalysis : null;
        this.IsTemplateEngineInjectionAnalysis = 'IsTemplateEngineInjectionAnalysis' in params ? params.IsTemplateEngineInjectionAnalysis : null;
        this.IsScriptEngineInjectionAnalysis = 'IsScriptEngineInjectionAnalysis' in params ? params.IsScriptEngineInjectionAnalysis : null;
        this.IsExpressionInjectionAnalysis = 'IsExpressionInjectionAnalysis' in params ? params.IsExpressionInjectionAnalysis : null;
        this.IsJNDIInjectionAnalysis = 'IsJNDIInjectionAnalysis' in params ? params.IsJNDIInjectionAnalysis : null;
        this.IsJNIInjectionAnalysis = 'IsJNIInjectionAnalysis' in params ? params.IsJNIInjectionAnalysis : null;
        this.IsWebshellBackdoorAnalysis = 'IsWebshellBackdoorAnalysis' in params ? params.IsWebshellBackdoorAnalysis : null;
        this.IsDeserializationAnalysis = 'IsDeserializationAnalysis' in params ? params.IsDeserializationAnalysis : null;
        this.UrlAutoConvergenceEnable = 'UrlAutoConvergenceEnable' in params ? params.UrlAutoConvergenceEnable : null;
        this.UrlLongSegmentThreshold = 'UrlLongSegmentThreshold' in params ? params.UrlLongSegmentThreshold : null;
        this.UrlNumberSegmentThreshold = 'UrlNumberSegmentThreshold' in params ? params.UrlNumberSegmentThreshold : null;
        this.DisableMemoryUsed = 'DisableMemoryUsed' in params ? params.DisableMemoryUsed : null;
        this.DisableCpuUsed = 'DisableCpuUsed' in params ? params.DisableCpuUsed : null;

    }
}

/**
 * APM floating-point number type key-value pair.
 * @class
 */
class APMKV extends  AbstractModel {
    constructor(){
        super();

        /**
         * Key value definition.
         * @type {string || null}
         */
        this.Key = null;

        /**
         * Value definition.
         * @type {number || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Key = 'Key' in params ? params.Key : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * DescribeGeneralOTSpanList request structure.
 * @class
 */
class DescribeGeneralOTSpanListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Business system id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Span query start timestamp (unit: seconds).
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * Span query end timestamp (unit: seconds).
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Universal filter parameters.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Sort
.
The currently supported keys are:.

-StartTime (start time).
-EndTime (end time).
-Duration (response time).

The currently supported values are:.

- desc: sort in descending order.
-Asc - ascending order.
         * @type {OrderBy || null}
         */
        this.OrderBy = null;

        /**
         * The service name of the business itself. console users should fill in taw.
         * @type {string || null}
         */
        this.BusinessName = null;

        /**
         * Number of items per page, defaults to 10,000, valid value range is 0 – 10,000.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Pagination.
         * @type {number || null}
         */
        this.Offset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

        if (params.OrderBy) {
            let obj = new OrderBy();
            obj.deserialize(params.OrderBy)
            this.OrderBy = obj;
        }
        this.BusinessName = 'BusinessName' in params ? params.BusinessName : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

    }
}

/**
 * DescribeApmAgent request structure.
 * @class
 */
class DescribeApmAgentRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Business system id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Access method: currently supports access and reporting via skywalking, ot, and ebpf methods. if not specified, ot is used by default.
         * @type {string || null}
         */
        this.AgentType = null;

        /**
         * Reporting environment: currently supports pl (private network reporting), public (public network), and inner (self-developed vpc) environment reporting. if not specified, the default is public.
         * @type {string || null}
         */
        this.NetworkMode = null;

        /**
         * Language reporting is now supported for java, golang, php, python, dotnet, nodejs. if not specified, golang is used by default.
         * @type {string || null}
         */
        this.LanguageEnvironment = null;

        /**
         * Reporting method, deprecated.
         * @type {string || null}
         */
        this.ReportMethod = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.AgentType = 'AgentType' in params ? params.AgentType : null;
        this.NetworkMode = 'NetworkMode' in params ? params.NetworkMode : null;
        this.LanguageEnvironment = 'LanguageEnvironment' in params ? params.LanguageEnvironment : null;
        this.ReportMethod = 'ReportMethod' in params ? params.ReportMethod : null;

    }
}

/**
 * DescribeMetricRecords request structure.
 * @class
 */
class DescribeMetricRecordsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Metric list.
         * @type {Array.<QueryMetricItem> || null}
         */
        this.Metrics = null;

        /**
         * Business system id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Start time (unit: sec).
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * End time (unit: seconds).
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Aggregation dimension.
         * @type {Array.<string> || null}
         */
        this.GroupBy = null;

        /**
         * Filter criteria.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Or filter criteria.
         * @type {Array.<Filter> || null}
         */
        this.OrFilters = null;

        /**
         * Sort
.
The currently supported keys are:.

-StartTime (start time).
-EndTime (end time).
-Duration (response time).

The currently supported values are:.

- desc: sort in descending order.
-Asc - ascending order.
         * @type {OrderBy || null}
         */
        this.OrderBy = null;

        /**
         * The service name of the business itself. console users should fill in taw.
         * @type {string || null}
         */
        this.BusinessName = null;

        /**
         * Special handling of query results.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Size per page, defaults to 1,000, valid value range is 0 – 1,000.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Paging starting point.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Page number.
         * @type {number || null}
         */
        this.PageIndex = null;

        /**
         * Page length.
         * @type {number || null}
         */
        this.PageSize = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Metrics) {
            this.Metrics = new Array();
            for (let z in params.Metrics) {
                let obj = new QueryMetricItem();
                obj.deserialize(params.Metrics[z]);
                this.Metrics.push(obj);
            }
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.GroupBy = 'GroupBy' in params ? params.GroupBy : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

        if (params.OrFilters) {
            this.OrFilters = new Array();
            for (let z in params.OrFilters) {
                let obj = new Filter();
                obj.deserialize(params.OrFilters[z]);
                this.OrFilters.push(obj);
            }
        }

        if (params.OrderBy) {
            let obj = new OrderBy();
            obj.deserialize(params.OrderBy)
            this.OrderBy = obj;
        }
        this.BusinessName = 'BusinessName' in params ? params.BusinessName : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.PageIndex = 'PageIndex' in params ? params.PageIndex : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;

    }
}

/**
 * DescribeGeneralApmApplicationConfig response structure.
 * @class
 */
class DescribeGeneralApmApplicationConfigResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application configuration item.
         * @type {ApmApplicationConfigView || null}
         */
        this.ApmApplicationConfigView = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ApmApplicationConfigView) {
            let obj = new ApmApplicationConfigView();
            obj.deserialize(params.ApmApplicationConfigView)
            this.ApmApplicationConfigView = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeGeneralMetricData request structure.
 * @class
 */
class DescribeGeneralMetricDataRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Metric name to be queried, which cannot be customized. (for details, see <https://intl.cloud.tencent.com/document/product/248/101681?from_cn_redirect=1>.).
         * @type {Array.<string> || null}
         */
        this.Metrics = null;

        /**
         * Business system id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * View name. the input cannot be customized. [for details, see.](https://intl.cloud.tencent.com/document/product/248/101681?from_cn_redirect=1).
         * @type {string || null}
         */
        this.ViewName = null;

        /**
         * The dimension information to be filtered; different views have corresponding metric dimensions. (for details, see <https://intl.cloud.tencent.com/document/product/248/101681?from_cn_redirect=1>.).
         * @type {Array.<GeneralFilter> || null}
         */
        this.Filters = null;

        /**
         * Aggregated dimension; different views have corresponding metric dimensions. (for details, see <https://intl.cloud.tencent.com/document/product/248/101681?from_cn_redirect=1>.).
         * @type {Array.<string> || null}
         */
        this.GroupBy = null;

        /**
         * The timestamp of the start time, supporting the query of metric data within 30 days. (unit: seconds).
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * The timestamp of the end time, supporting the query of metric data within 30 days. (unit: seconds).
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Whether to aggregate by a fixed time span: enter 1 for values of 1 and greater, and 0 if not filled in.
-If 0 is filled in, it calculates the metric data from the start time to the cutoff time.
- if 1 is filled in, the aggregation granularity will be selected according to the time span from the start time to the deadline:.
 -If the time span is (0,12) hours, it is aggregated by one-minute granularity.
 -If the time span is [12,48] hours, it is aggregated at a five-minute granularity.
 -If the time span is (48, +∞) hours, it is aggregated at an hourly granularity.
         * @type {number || null}
         */
        this.Period = null;

        /**
         * Sort query metrics.
Key: enter the tencentcloud api metric name. [for details, see](https://intl.cloud.tencent.com/document/product/248/101681?from_cn_redirect=1) .
Value: specify the sorting method:.     
-Asc: sorts query metrics in ascending order.
- desc: sort query metrics in descending order.
         * @type {OrderBy || null}
         */
        this.OrderBy = null;

        /**
         * Maximum number of queried metrics. currently, up to 50 data entries can be displayed. the value range for pagesize is 1-50. submit pagesize to show the limited number based on the value of pagesize.
         * @type {number || null}
         */
        this.PageSize = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Metrics = 'Metrics' in params ? params.Metrics : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ViewName = 'ViewName' in params ? params.ViewName : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new GeneralFilter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.GroupBy = 'GroupBy' in params ? params.GroupBy : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Period = 'Period' in params ? params.Period : null;

        if (params.OrderBy) {
            let obj = new OrderBy();
            obj.deserialize(params.OrderBy)
            this.OrderBy = obj;
        }
        this.PageSize = 'PageSize' in params ? params.PageSize : null;

    }
}

/**
 * DescribeApmPrometheusRule request structure.
 * @class
 */
class DescribeApmPrometheusRuleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Business system ID
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * CreateApmInstance response structure.
 * @class
 */
class CreateApmInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Business system id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Upstream and downstream relationships of span.
 * @class
 */
class SpanReference extends  AbstractModel {
    constructor(){
        super();

        /**
         * Type of association relationship.
         * @type {string || null}
         */
        this.RefType = null;

        /**
         * Span ID
         * @type {string || null}
         */
        this.SpanID = null;

        /**
         * Trace ID
         * @type {string || null}
         */
        this.TraceID = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RefType = 'RefType' in params ? params.RefType : null;
        this.SpanID = 'SpanID' in params ? params.SpanID : null;
        this.TraceID = 'TraceID' in params ? params.TraceID : null;

    }
}

/**
 * CreateProfileTask request structure.
 * @class
 */
class CreateProfileTaskRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application name
         * @type {string || null}
         */
        this.ServiceName = null;

        /**
         * APM business system ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Application instance (online).
         * @type {string || null}
         */
        this.ServiceInstance = null;

        /**
         * Event type (cpu, alloc).
         * @type {string || null}
         */
        this.Event = null;

        /**
         * Specifies the task duration in milliseconds (ms). value range: 5 to 180 seconds.
         * @type {number || null}
         */
        this.Duration = null;

        /**
         * Number of execution. value range: 1-100.
         * @type {number || null}
         */
        this.AllTimes = null;

        /**
         * Start timestamp. 0 indicates start from the current time (unit: seconds).
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * Specifies the task execution interval in milliseconds (ms). value range: 10 to 600 seconds. cannot be less than 1.5 times the Duration.
         * @type {number || null}
         */
        this.TaskInterval = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ServiceName = 'ServiceName' in params ? params.ServiceName : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ServiceInstance = 'ServiceInstance' in params ? params.ServiceInstance : null;
        this.Event = 'Event' in params ? params.Event : null;
        this.Duration = 'Duration' in params ? params.Duration : null;
        this.AllTimes = 'AllTimes' in params ? params.AllTimes : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.TaskInterval = 'TaskInterval' in params ? params.TaskInterval : null;

    }
}

/**
 * Service information.
 * @class
 */
class SpanProcess extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application service name.
         * @type {string || null}
         */
        this.ServiceName = null;

        /**
         * Tags Tag array.
         * @type {Array.<SpanTag> || null}
         */
        this.Tags = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ServiceName = 'ServiceName' in params ? params.ServiceName : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new SpanTag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }

    }
}

/**
 * DeleteApmSampleConfig response structure.
 * @class
 */
class DeleteApmSampleConfigResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyApmAssociation request structure.
 * @class
 */
class ModifyApmAssociationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Associated product name. currently only supports Prometheus.
         * @type {string || null}
         */
        this.ProductName = null;

        /**
         * Status of the association relationship: // association status: 1 (enabled), 2 (disabled), 4 (deleted).
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Business system ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Associated product instance ID.
         * @type {string || null}
         */
        this.PeerId = null;

        /**
         * Specifies the CKafka message topic.
         * @type {string || null}
         */
        this.Topic = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProductName = 'ProductName' in params ? params.ProductName : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.PeerId = 'PeerId' in params ? params.PeerId : null;
        this.Topic = 'Topic' in params ? params.Topic : null;

    }
}

/**
 * Shows the association between the apm business system and prometheus in the return format.
 * @class
 */
class ApmPrometheusRules extends  AbstractModel {
    constructor(){
        super();

        /**
         * Metric match rule ID.
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Metric match rule name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Applications where the rule takes effect. input an empty string for all applications.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ServiceName = null;

        /**
         * Specifies the metric match rule status: 1 (enabled), 2 (disabled).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Specifies the metric match rule.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.MetricNameRule = null;

        /**
         * Match type: 0 - precision match, 1 - prefix match, 2 - suffix match.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MetricMatchType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.ServiceName = 'ServiceName' in params ? params.ServiceName : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.MetricNameRule = 'MetricNameRule' in params ? params.MetricNameRule : null;
        this.MetricMatchType = 'MetricMatchType' in params ? params.MetricMatchType : null;

    }
}

/**
 * ModifyApmSampleConfig request structure.
 * @class
 */
class ModifyApmSampleConfigRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Business system ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Sampling rule name.
         * @type {string || null}
         */
        this.SampleName = null;

        /**
         * Sampling rate.
         * @type {number || null}
         */
        this.SampleRate = null;

        /**
         * Application name. specifies the application name. fill in the blank to take effect on all applications.
         * @type {string || null}
         */
        this.ServiceName = null;

        /**
         * API name.
         * @type {string || null}
         */
        this.OperationName = null;

        /**
         * Sampling tag
         * @type {Array.<APMKVItem> || null}
         */
        this.Tags = null;

        /**
         * Sampling switch. 0: Off; 1: On; 2: Delete
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Configuration ID.
         * @type {number || null}
         */
        this.Id = null;

        /**
         * 0: exact match (default); 1: prefix match; 2: suffix match.
         * @type {number || null}
         */
        this.OperationType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.SampleName = 'SampleName' in params ? params.SampleName : null;
        this.SampleRate = 'SampleRate' in params ? params.SampleRate : null;
        this.ServiceName = 'ServiceName' in params ? params.ServiceName : null;
        this.OperationName = 'OperationName' in params ? params.OperationName : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new APMKVItem();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.Status = 'Status' in params ? params.Status : null;
        this.Id = 'Id' in params ? params.Id : null;
        this.OperationType = 'OperationType' in params ? params.OperationType : null;

    }
}

/**
 * DescribeGeneralApmApplicationConfig request structure.
 * @class
 */
class DescribeGeneralApmApplicationConfigRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application name.
         * @type {string || null}
         */
        this.ServiceName = null;

        /**
         * Business system id.
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ServiceName = 'ServiceName' in params ? params.ServiceName : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * Sampling configuration
 * @class
 */
class ApmSampleConfig extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceKey = null;

        /**
         * Service name.
         * @type {string || null}
         */
        this.ServiceName = null;

        /**
         * Sampling name
         * @type {string || null}
         */
        this.SampleName = null;

        /**
         * API name.
         * @type {string || null}
         */
        this.OperationName = null;

        /**
         * Number of spans sampled
         * @type {number || null}
         */
        this.SpanNum = null;

        /**
         * Sampling configuration switch. 0: Off; 1: On
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Tag array
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<APMKVItem> || null}
         */
        this.Tags = null;

        /**
         * Sampling rate.
         * @type {number || null}
         */
        this.SampleRate = null;

        /**
         * Specifies the matching method. 0: exact match (default); 1: prefix match; 2: suffix match.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.OperationType = null;

        /**
         * Configuration ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Id = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceKey = 'InstanceKey' in params ? params.InstanceKey : null;
        this.ServiceName = 'ServiceName' in params ? params.ServiceName : null;
        this.SampleName = 'SampleName' in params ? params.SampleName : null;
        this.OperationName = 'OperationName' in params ? params.OperationName : null;
        this.SpanNum = 'SpanNum' in params ? params.SpanNum : null;
        this.Status = 'Status' in params ? params.Status : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new APMKVItem();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.SampleRate = 'SampleRate' in params ? params.SampleRate : null;
        this.OperationType = 'OperationType' in params ? params.OperationType : null;
        this.Id = 'Id' in params ? params.Id : null;

    }
}

/**
 * Queries filter parameters.
 * @class
 */
class GeneralFilter extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filter dimension name.
         * @type {string || null}
         */
        this.Key = null;

        /**
         * Values after filtering.
         * @type {string || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Key = 'Key' in params ? params.Key : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * DescribeApmInstances request structure.
 * @class
 */
class DescribeApmInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Tag list.
         * @type {Array.<ApmTag> || null}
         */
        this.Tags = null;

        /**
         * Filters by business system name, and fuzzy search is supported.
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Filters by business system ID, and fuzzy search is supported.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Filter by business system id.
         * @type {Array.<string> || null}
         */
        this.InstanceIds = null;

        /**
         * Whether to query the official demo business system (0 = non-demo business system, 1 = demo business system, default is 0).
         * @type {number || null}
         */
        this.DemoInstanceFlag = null;

        /**
         * Whether to query all regional business systems (0 = do not query all regions, 1 = query all regions, default is 0).
         * @type {number || null}
         */
        this.AllRegionsFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new ApmTag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceIds = 'InstanceIds' in params ? params.InstanceIds : null;
        this.DemoInstanceFlag = 'DemoInstanceFlag' in params ? params.DemoInstanceFlag : null;
        this.AllRegionsFlag = 'AllRegionsFlag' in params ? params.AllRegionsFlag : null;

    }
}

/**
 * Tag.
 * @class
 */
class SpanTag extends  AbstractModel {
    constructor(){
        super();

        /**
         * Tag type.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Tag key.
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Key = null;

        /**
         * Tag value
.
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Type = 'Type' in params ? params.Type : null;
        this.Key = 'Key' in params ? params.Key : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * DescribeGeneralMetricData response structure.
 * @class
 */
class DescribeGeneralMetricDataResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Indicator result set.
         * @type {Array.<Line> || null}
         */
        this.Records = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Records) {
            this.Records = new Array();
            for (let z in params.Records) {
                let obj = new Line();
                obj.deserialize(params.Records[z]);
                this.Records.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteApmSampleConfig request structure.
 * @class
 */
class DeleteApmSampleConfigRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Business system ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Sampling rule name.
         * @type {string || null}
         */
        this.SampleName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.SampleName = 'SampleName' in params ? params.SampleName : null;

    }
}

/**
 * Common kv structure of apm.
 * @class
 */
class APMKVItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Key value definition.
         * @type {string || null}
         */
        this.Key = null;

        /**
         * Value definition.
         * @type {string || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Key = 'Key' in params ? params.Key : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * CreateApmPrometheusRule response structure.
 * @class
 */
class CreateApmPrometheusRuleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * TerminateApmInstance response structure.
 * @class
 */
class TerminateApmInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

module.exports = {
    DescribeApmAssociationResponse: DescribeApmAssociationResponse,
    ModifyApmInstanceRequest: ModifyApmInstanceRequest,
    ApmInstanceDetail: ApmInstanceDetail,
    CreateApmInstanceRequest: CreateApmInstanceRequest,
    ModifyGeneralApmApplicationConfigRequest: ModifyGeneralApmApplicationConfigRequest,
    DescribeApmServiceMetricRequest: DescribeApmServiceMetricRequest,
    CreateApmPrometheusRuleRequest: CreateApmPrometheusRuleRequest,
    QueryMetricItem: QueryMetricItem,
    ModifyApmPrometheusRuleRequest: ModifyApmPrometheusRuleRequest,
    ModifyGeneralApmApplicationConfigResponse: ModifyGeneralApmApplicationConfigResponse,
    DescribeApmInstancesResponse: DescribeApmInstancesResponse,
    AgentOperationConfigView: AgentOperationConfigView,
    Instrument: Instrument,
    DescribeTagValuesResponse: DescribeTagValuesResponse,
    DescribeTagValuesRequest: DescribeTagValuesRequest,
    DescribeApmPrometheusRuleResponse: DescribeApmPrometheusRuleResponse,
    ServiceDetail: ServiceDetail,
    Span: Span,
    ApmAgentInfo: ApmAgentInfo,
    TerminateApmInstanceRequest: TerminateApmInstanceRequest,
    ApmApplicationConfigView: ApmApplicationConfigView,
    ApmMetricRecord: ApmMetricRecord,
    DescribeServiceOverviewRequest: DescribeServiceOverviewRequest,
    DescribeApmSampleConfigResponse: DescribeApmSampleConfigResponse,
    DescribeApmAgentResponse: DescribeApmAgentResponse,
    CreateApmSampleConfigRequest: CreateApmSampleConfigRequest,
    DescribeApmSampleConfigRequest: DescribeApmSampleConfigRequest,
    ModifyApmInstanceResponse: ModifyApmInstanceResponse,
    SpanLog: SpanLog,
    ApmServiceMetric: ApmServiceMetric,
    ModifyApmSampleConfigResponse: ModifyApmSampleConfigResponse,
    ApmAppConfig: ApmAppConfig,
    CreateApmSampleConfigResponse: CreateApmSampleConfigResponse,
    DescribeApmApplicationConfigRequest: DescribeApmApplicationConfigRequest,
    Filter: Filter,
    ApmField: ApmField,
    Line: Line,
    DescribeGeneralSpanListResponse: DescribeGeneralSpanListResponse,
    CreateProfileTaskResponse: CreateProfileTaskResponse,
    DescribeGeneralSpanListRequest: DescribeGeneralSpanListRequest,
    ModifyApmPrometheusRuleResponse: ModifyApmPrometheusRuleResponse,
    ApmAssociation: ApmAssociation,
    OrderBy: OrderBy,
    DescribeServiceOverviewResponse: DescribeServiceOverviewResponse,
    DescribeApmServiceMetricResponse: DescribeApmServiceMetricResponse,
    ModifyApmAssociationResponse: ModifyApmAssociationResponse,
    DescribeMetricRecordsResponse: DescribeMetricRecordsResponse,
    DescribeGeneralOTSpanListResponse: DescribeGeneralOTSpanListResponse,
    ApmTag: ApmTag,
    ModifyApmApplicationConfigResponse: ModifyApmApplicationConfigResponse,
    DescribeApmApplicationConfigResponse: DescribeApmApplicationConfigResponse,
    DescribeApmAssociationRequest: DescribeApmAssociationRequest,
    ModifyApmApplicationConfigRequest: ModifyApmApplicationConfigRequest,
    APMKV: APMKV,
    DescribeGeneralOTSpanListRequest: DescribeGeneralOTSpanListRequest,
    DescribeApmAgentRequest: DescribeApmAgentRequest,
    DescribeMetricRecordsRequest: DescribeMetricRecordsRequest,
    DescribeGeneralApmApplicationConfigResponse: DescribeGeneralApmApplicationConfigResponse,
    DescribeGeneralMetricDataRequest: DescribeGeneralMetricDataRequest,
    DescribeApmPrometheusRuleRequest: DescribeApmPrometheusRuleRequest,
    CreateApmInstanceResponse: CreateApmInstanceResponse,
    SpanReference: SpanReference,
    CreateProfileTaskRequest: CreateProfileTaskRequest,
    SpanProcess: SpanProcess,
    DeleteApmSampleConfigResponse: DeleteApmSampleConfigResponse,
    ModifyApmAssociationRequest: ModifyApmAssociationRequest,
    ApmPrometheusRules: ApmPrometheusRules,
    ModifyApmSampleConfigRequest: ModifyApmSampleConfigRequest,
    DescribeGeneralApmApplicationConfigRequest: DescribeGeneralApmApplicationConfigRequest,
    ApmSampleConfig: ApmSampleConfig,
    GeneralFilter: GeneralFilter,
    DescribeApmInstancesRequest: DescribeApmInstancesRequest,
    SpanTag: SpanTag,
    DescribeGeneralMetricDataResponse: DescribeGeneralMetricDataResponse,
    DeleteApmSampleConfigRequest: DeleteApmSampleConfigRequest,
    APMKVItem: APMKVItem,
    CreateApmPrometheusRuleResponse: CreateApmPrometheusRuleResponse,
    TerminateApmInstanceResponse: TerminateApmInstanceResponse,

}
